PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::CMHash Klassenreferenz

Klasse zum Erstellen von Hashes nach verschiedenen Algorithmen. Mehr ...

Öffentliche Typen

enum  Algorithm {
  Algo_CRC32, Algo_CRC32B, Algo_ADLER32, Algo_MD2,
  Algo_MD4, Algo_MD5, Algo_SHA1, Algo_SHA224,
  Algo_SHA256, Algo_SHA384, Algo_SHA512, Algo_WHIRLPOOL,
  Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160,
  Algo_HAVAL128, Algo_RIPEMD128, Algo_RIPEMD160, Algo_RIPEMD256,
  Algo_RIPEMD320, Algo_TIGER128, Algo_TIGER160, Algo_TIGER192,
  Algo_GOST, Algo_SNEFRU128, Algo_SNEFRU256
}
 Unterstütze Algorithmen. Mehr ...
 
enum  Bits {
  Bits_Default, Bits_128, Bits_160, Bits_192,
  Bits_224, Bits_256, Bits_320, Bits_384,
  Bits_512
}
 

Öffentliche Methoden

 CMHash ()
 Konstruktor der Klasse. Mehr ...
 
 CMHash (Algorithm method)
 Konstruktor mit Initialisierung des Algorithmus. Mehr ...
 
 ~CMHash ()
 Destruktor der Klasse. Mehr ...
 
int AddData (const void *data, size_t size)
 Daten zur Berechnung hinzufügen. Mehr ...
 
int AddData (const CVar &data)
 Daten-Objekt zur Berechnung hinzufügen. Mehr ...
 
int AddData (CFileObject &file)
 Hash-Wert einer geöffneten Datei berechnen. Mehr ...
 
int AddFile (const char *filename)
 Hash-Wert einer Datei berechnen. Mehr ...
 
int GetBlockSize () const
 Größe des gewählten Hash-Algorithmus. Mehr ...
 
int GetResult (CVar &result)
 Ergebnis auslesen. Mehr ...
 
int Init (Algorithm method)
 Auswahl des gewünschten Hash-Algorithmus. Mehr ...
 
void Reset ()
 Interne Datenstrukturen zurücksetzen. Mehr ...
 

Öffentliche, statische Methoden

static int ADLER32 (const CVar &data, CVar &result)
 ADLER32 berechnen. Mehr ...
 
static int ADLER32 (const CVar &data)
 ADLER32 berechnen. Mehr ...
 
static int CRC32 (const CVar &data, CVar &result)
 CRC32-Summe berechnen, wie sie im Netzwerkbereich verwendet wird. Mehr ...
 
static int CRC32 (const CVar &data)
 CRC32-Summe berechnen, wie sie im Netzwerkbereich verwendet wird. Mehr ...
 
static int CRC32B (const CVar &data, CVar &result)
 CRC32-Summe berechnen, wie sie in ZIP-Programmen verwendet wird. Mehr ...
 
static int CRC32B (const CVar &data)
 CRC32-Summe berechnen, wie sie in ZIP-Programmen verwendet wird. Mehr ...
 
static int GOST (const CVar &data, CVar &result)
 GOST-Hash berechnen. Mehr ...
 
static int Hash (const CVar &data, CVar &result, Algorithm algo)
 Hash-Wert mit einem beliebigen Algorithmus berechnen. Mehr ...
 
static int Hash (const CVar &data, CVar &result, const CString &algo)
 Hash-Wert mit einem beliebigen Algorithmus berechnen. Mehr ...
 
static int HAVAL (const CVar &data, CVar &result, Bits bits=Bits_Default)
 HAVAL-Hash berechnen. Mehr ...
 
static int MD4 (const CVar &data, CVar &result)
 MD4-Hash berechnen. Mehr ...
 
static int MD5 (const CVar &data, CVar &result)
 MD5-Hash berechnen. Mehr ...
 
static int RIPEMD (const CVar &data, CVar &result, Bits bits=Bits_160)
 RIPEMD-Hash berechnen. Mehr ...
 
static int SHA1 (const CVar &data, CVar &result)
 SHA1-Hash berechnen. Mehr ...
 
static int SHA2 (const CVar &data, CVar &result, Bits bits=Bits_256)
 SHA2-Hash berechnen. Mehr ...
 
static int SHA224 (const CVar &data, CVar &result)
 SHA224-Hash berechnen. Mehr ...
 
static int SHA256 (const CVar &data, CVar &result)
 SHA256-Hash berechnen. Mehr ...
 
static int SHA384 (const CVar &data, CVar &result)
 SHA384-Hash berechnen. Mehr ...
 
static int SHA512 (const CVar &data, CVar &result)
 SHA512-Hash berechnen. Mehr ...
 
static int SNEFRU (const CVar &data, CVar &result, Bits bits=Bits_160)
 SNEFRU-Hash berechnen. Mehr ...
 
static int TIGER (const CVar &data, CVar &result, Bits bits=Bits_Default)
 TIGER-Hash berechnen. Mehr ...
 
static int WHIRLPOOL (const CVar &data, CVar &result)
 WHIRLPOOL-Hash berechnen. Mehr ...
 

Private Attribute

Algorithm algo
 
int blocksize
 
ppluint64 bytesHashed
 
void * handle
 

Ausführliche Beschreibung

Include:
#include <ppl6-crypt.h>
Beschreibung:
Mit dieser Klasse können Hashes von beliebigen Daten mit verschiedenen Algorithmen, wie z.B. MD5 oder SHA256 erstellt werden. Die Klasse basiert auf Funktionen der MHash-Library, die unter der GNU General Public License (GPL) steht.
Zu beachten
Damit diese Klasse verwendet werden kann, muss vor Aufruf des configure-Scripts die Library libmhash installiert sein. Falls das configure die Library nicht automatisch findet, kann der Installationspfad über den configure Parameter "--with-libhash-prefix=..." angegeben werden. Falls libmhash nicht eingebunden wurde, liefern fast alle Funktionen einen Fehler zurück und setzen den Fehlercode "527".
Mit der statischen Funktion Cppl6Core::haveMHash kann zur Laufzeit geprüft werden, ob libmhash eingebunden wurde.
printf("MHash steht nicht zur Verfügung!\n");
return;
}
Beispiel:
Das folgende Beispiel zeigt, wie die Klasse verwendet werden kann:
#include <ppl6.h>
#include <ppl6-crypt.h>
int mhash_demo_class()
{
// Zuerst erstellen wir mal ein Binary-Objekt, das unsere zu hashende Daten enthält
ppl6::CBinary data="The quick brown fox jumps over the lazy dog";
// Nun erstellen wir unsere Klasse
// Wir wollen einen SHA256 Hash
return 0;
}
// Jetzt übergeben wir unsere Daten zum Hashen
if (!Hash.AddData(data)) {
return 0;
}
// Und holen uns das Ergebnis als String
ppl6::CString result;
if (!Hash.GetResult(result)) {
return 0;
}
// Den geben wir auf stdout aus
result.Print(true);
return 1;
}
Ergebnis:
patrick@server: ./ppltest
d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
Beispiel:
Das nachfolgende Beispiel zeigt, wie die statische Funktion CMHash::CRC32B verwendet wird, um eine CRC-Prüfsumme zu berechnen:
#include <ppl6.h>
#include <ppl6-crypt.h>
int mhash_demo_static_crc32()
{
// Zuerst erstellen wir ein Binary-Objekt, für das wir die Prüfsumme berechnen wollen
ppl6::CBinary data="The quick brown fox jumps over the lazy dog";
// Das Ergebnis wollen wir als 32-Bit Integer
ppl6::CInt result;
if (!ppl6::CMHash::CRC32B(data,result)) { // MD5-Hashfunktion aufrufen
return 0;
}
// Jetzt das Ergebnis ausgeben
printf ("Die CRC32-Prüfsumme lautet: %u (0x%X)\n",(unsigned int)result, (unsigned int)result);
return 1;
}
Ergebnis:
patrick@server: ./ppltest
Die CRC32-Prüfsumme lautet: 1095738169 (0x414FA339)
Beispiel:
Und zuletzt noch ein Beispiel mit CMHash::MD5:
#include <ppl6.h>
#include <ppl6-crypt.h>
int mhash_demo_static_md5()
{
// Zuerst erstellen wir mal ein Binary-Objekt, das unsere zu hashende Daten enthält
ppl6::CBinary data="The quick brown fox jumps over the lazy dog";
// Das Ergebnis wollen wir als Hexadezimalwert in einem String
ppl6::CString result;
if (!ppl6::CMHash::MD5(data,result)) { // MD5-Hashfunktion aufrufen
return 0;
}
result.Print(true); // Ergebnis ausgeben
return 1;
}
Ergebnis:
patrick@server: ./ppltest
9e107d9d372bb6826bd81d3542a419d6

Dokumentation der Aufzählungstypen

Die Klasse unterstützt folgende Algorithmen zu Erzeugen der Hashes:

Aufzählungswerte
Algo_CRC32 

Die zyklische Redundanzprüfung (engl. cyclic redundancy check, daher meist CRC) ist ein Verfahren (bzw. eine bestimmte Klasse von Verfahren) aus der Informationstechnik zur Bestimmung eines Prüfwerts für Daten (z. B. Datenübertragung in Rechnernetzen oder eine Datei), um Fehler bei der Übertragung oder Duplizierung von Daten erkennen zu können. Diese Klasse unterstützt zwei Varianten des Algorithmus: CMHash::Algo_CRC32 (wird im Netzwerkbereich verwendet) und CMHash::Algo_CRC32B (wird z.B. in ZIP Programmen verwendet).

Algo_CRC32B 

Die zyklische Redundanzprüfung (engl. cyclic redundancy check, daher meist CRC) ist ein Verfahren (bzw. eine bestimmte Klasse von Verfahren) aus der Informationstechnik zur Bestimmung eines Prüfwerts für Daten (z. B. Datenübertragung in Rechnernetzen oder eine Datei), um Fehler bei der Übertragung oder Duplizierung von Daten erkennen zu können. Diese Klasse unterstützt zwei Varianten des Algorithmus: CMHash::Algo_CRC32 (wird im Netzwerkbereich verwendet) und CMHash::Algo_CRC32B (wird z.B. in ZIP Programmen verwendet). Dies ist auch der Algorithmus, der in ppl6::crc32 und ppl6::CSocketMessage verwendet wird.

Algo_ADLER32 

Adler-32 ist ein einfacher, von Mark Adler entwickelter Prüfsummenalgorithmus. Er wird unter anderem von der zlib-Bibliothek benutzt, um (zufällige Übertragungs-)Fehler im komprimierten Datenstrom zu erkennen. In RFC 1950 wird der Algorithmus genau beschrieben.

Der Adler-32-Algorithmus ist einfacher und lässt sich schneller berechnen als die bekannte Zyklische Redundanzprüfung (siehe CMHash::Algo_CRC32), bietet aber auch weniger Sicherheit beim Erkennen von zufälligen Bitfehlern.

Algo_MD2 

Message-Digest Algorithm 2 (MD2) ist eine von Ronald L. Rivest im Jahr 1988 veröffentlichte Hash-Funktion. Der Algorithmus wurde für 8-Bit Rechner optimiert. MD2 ist in RFC 1319 spezifiziert. Bereits 1997 wurden erste Kollisionsmöglichkeiten im Algorithmus entdeckt und seit 2004 gilt er offiziell als unsicher.

Algo_MD4 

MD4 (engl. Message-Digest Algorithm 4) wurde 1990 von Ronald L. Rivest veröffentlicht. Der MD4 Hash-Algorithmus wurde mit dem Anspruch entwickelt, auf 32 Bit-Rechnern besonders schnell zu laufen und gleichzeitig in der Implementierung einfach zu sein. Dabei sollten natürlich die grundlegenden Anforderungen an Hash-Funktionen erhalten bleiben. MD4 erzeugt einen Hashwert mit einer Länge von 128 Bit.

Trotz aller Sorgfalt im Design zeigte sich bald, dass das Verfahren unsicher ist. Als besonders problematisch stellte sich die mangelnde Kollisionsbeständigkeit heraus. Im Cryptobytes Journal der Firma RSA wurde eine Methode veröffentlicht, welche innerhalb einer Stunde zwei bis auf ein Zeichen identische Nachrichten erzeugen konnte, die denselben Hashwert ergaben. Rivest selbst bestätigte die Unsicherheit im RFC 1321, so dass selbst RSA vom Einsatz dieses Message-Digest abrät. MD4 wurde als Public Domain lizenziert, worauf wohl zurückzuführen ist, dass das verwendete Prinzip zur Basis weiterer Hash-Funktionen geworden ist.

Algo_MD5 

MD5 (Message-Digest Algorithm 5) ist eine weit verbreitete kryptographische Hashfunktion, die einen 128-Bit-Hashwert erzeugt. MD5 wurde 1991 von Ronald L. Rivest entwickelt. Die errechneten MD5-Summen (kurz md5sum) werden zum Beispiel zur Integritätsprüfung von Dateien eingesetzt. Inzwischen ist es möglich anhand der Quelldaten Kollisionen zu finden, daher gilt MD5 inzwischen nicht mehr als 100% sicher. Ist nur der Hash-Wert bekannt, ist es nach wie vor schwierig.

Algo_SHA1 

SHA1 wurde vom Amerikanischen NIST (National Institute of Standards and Technology) zusammen mit der NSA (National Security Agency) 1995 entwickelt und hjat einen Hash-Wert von 160 Bit Länge für beliebige digitale Daten von maximal $ 2^{64}−1$ Bit (≈ 2 Exbibyte) Länge. Der Algorithmus ähnelt im Aufbau dem von Ronald L. Rivest entwickelten MD4. Im Sommer 2006 wurde eine wesentliche Schwäche dieses Algorithmus entdeckt und publik gemacht. Grundsätzlich sollte SHA-1 daher nicht mehr in neuen Entwicklungen als sicherer Hash-Algorithmus vorgesehen werden.

Algo_SHA224 

Das NIST (National Institute of Standards and Technology) hat im August 2002 drei weitere Varianten des Algorithmus veröffentlicht, die größere Hash-Werte als SHA1 erzeugen. Es handelt sich dabei um den SHA-256, SHA-384 und SHA-512 wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt. Mit SHA-384 und SHA-512 können (theoretisch) Daten bis zu einer Größe von $ 2^{128} $ Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als $ 2^{64} $ Bit jedoch unrealistisch. Im Februar 2004 wurde eine weitere Version, SHA-224, veröffentlicht. Die 4 Varianten werden zusammenfassend als SHA-2 bezeichnet.

Algo_SHA256 

Das NIST (National Institute of Standards and Technology) hat im August 2002 drei weitere Varianten des Algorithmus veröffentlicht, die größere Hash-Werte als SHA1 erzeugen. Es handelt sich dabei um den SHA-256, SHA-384 und SHA-512 wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt. Mit SHA-384 und SHA-512 können (theoretisch) Daten bis zu einer Größe von $ 2^{128} $ Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als $ 2^{64} $ Bit jedoch unrealistisch. Im Februar 2004 wurde eine weitere Version, SHA-224, veröffentlicht. Die 4 Varianten werden zusammenfassend als SHA-2 bezeichnet.

Algo_SHA384 

Das NIST (National Institute of Standards and Technology) hat im August 2002 drei weitere Varianten des Algorithmus veröffentlicht, die größere Hash-Werte als SHA1 erzeugen. Es handelt sich dabei um den SHA-256, SHA-384 und SHA-512 wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt. Mit SHA-384 und SHA-512 können (theoretisch) Daten bis zu einer Größe von $ 2^{128} $ Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als $ 2^{64} $ Bit jedoch unrealistisch. Im Februar 2004 wurde eine weitere Version, SHA-224, veröffentlicht. Die 4 Varianten werden zusammenfassend als SHA-2 bezeichnet.

Algo_SHA512 

Das NIST (National Institute of Standards and Technology) hat im August 2002 drei weitere Varianten des Algorithmus veröffentlicht, die größere Hash-Werte als SHA1 erzeugen. Es handelt sich dabei um den SHA-256, SHA-384 und SHA-512 wobei die angefügte Zahl jeweils die Länge des Hash-Werts (in Bit) angibt. Mit SHA-384 und SHA-512 können (theoretisch) Daten bis zu einer Größe von $ 2^{128} $ Bit verarbeitet werden. In der Praxis sind Dateien mit mehr als $ 2^{64} $ Bit jedoch unrealistisch. Im Februar 2004 wurde eine weitere Version, SHA-224, veröffentlicht. Die 4 Varianten werden zusammenfassend als SHA-2 bezeichnet.

Algo_WHIRLPOOL 

WHIRLPOOL ist eine kryptologische Hash-Funktion, die von Vincent Rijmen und Paulo S. L. M. Barreto entworfen wurde. Sie wurde nach der Whirlpool-Galaxie im Sternbild der Jagdhunde benannt. Whirlpool funktioniert mit Dateien bis zu $ 2^{256}$ Bit Größe und gibt einen Hash-Wert von 512 Bit aus. Bislang sind keine Schwächen des Algorithmus bekannt, was allerdings relativiert werden muss, da der Algorithmus noch sehr jung ist und bislang wenig untersucht wurde. Die Autoren haben erklärt, dass Whirlpool nicht patentiert ist und es nie sein wird. Whirlpool darf kostenlos zu jedem Zweck verwendet werden.

Whirlpool gehört zu den vom Projekt NESSIE empfohlenen kryptografischen Algorithmen und wurde von der ISO mit ISO/IEC 10118-3:2004 standardisiert. (Quelle: http://de.wikipedia.org/wiki/Whirlpool_(Algorithmus) )

Algo_HAVAL256 

HAVAL ist eine kryptologische Hash-Funktion. Im Gegensatz zu MD5 ist es mit HAVAL, wie mit anderen moderneren Algorithmen, möglich, Hashes variabler Länge zu erzeugen, vor allem von 128 Bit, 160 Bit, 192 Bit, 224 Bit und 256 Bit. HAVAL erlaubt außerdem eine variable Anzahl von Runden (3, 4, oder 5). HAVAL wurde von Yuliang Zheng, Josef Pieprzyk, und Jennifer Seberry im Jahr 1992 erfunden. Die CMHash-Klasse unterstützt alle genannten Hash-Längen: Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160 and Algo_HAVAL128

Algo_HAVAL224 

HAVAL ist eine kryptologische Hash-Funktion. Im Gegensatz zu MD5 ist es mit HAVAL, wie mit anderen moderneren Algorithmen, möglich, Hashes variabler Länge zu erzeugen, vor allem von 128 Bit, 160 Bit, 192 Bit, 224 Bit und 256 Bit. HAVAL erlaubt außerdem eine variable Anzahl von Runden (3, 4, oder 5). HAVAL wurde von Yuliang Zheng, Josef Pieprzyk, und Jennifer Seberry im Jahr 1992 erfunden. Die CMHash-Klasse unterstützt alle genannten Hash-Längen: Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160 and Algo_HAVAL128

Algo_HAVAL192 

HAVAL ist eine kryptologische Hash-Funktion. Im Gegensatz zu MD5 ist es mit HAVAL, wie mit anderen moderneren Algorithmen, möglich, Hashes variabler Länge zu erzeugen, vor allem von 128 Bit, 160 Bit, 192 Bit, 224 Bit und 256 Bit. HAVAL erlaubt außerdem eine variable Anzahl von Runden (3, 4, oder 5). HAVAL wurde von Yuliang Zheng, Josef Pieprzyk, und Jennifer Seberry im Jahr 1992 erfunden. Die CMHash-Klasse unterstützt alle genannten Hash-Längen: Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160 and Algo_HAVAL128

Algo_HAVAL160 

HAVAL ist eine kryptologische Hash-Funktion. Im Gegensatz zu MD5 ist es mit HAVAL, wie mit anderen moderneren Algorithmen, möglich, Hashes variabler Länge zu erzeugen, vor allem von 128 Bit, 160 Bit, 192 Bit, 224 Bit und 256 Bit. HAVAL erlaubt außerdem eine variable Anzahl von Runden (3, 4, oder 5). HAVAL wurde von Yuliang Zheng, Josef Pieprzyk, und Jennifer Seberry im Jahr 1992 erfunden. Die CMHash-Klasse unterstützt alle genannten Hash-Längen: Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160 and Algo_HAVAL128

Algo_HAVAL128 

HAVAL ist eine kryptologische Hash-Funktion. Im Gegensatz zu MD5 ist es mit HAVAL, wie mit anderen moderneren Algorithmen, möglich, Hashes variabler Länge zu erzeugen, vor allem von 128 Bit, 160 Bit, 192 Bit, 224 Bit und 256 Bit. HAVAL erlaubt außerdem eine variable Anzahl von Runden (3, 4, oder 5). HAVAL wurde von Yuliang Zheng, Josef Pieprzyk, und Jennifer Seberry im Jahr 1992 erfunden. Die CMHash-Klasse unterstützt alle genannten Hash-Längen: Algo_HAVAL256, Algo_HAVAL224, Algo_HAVAL192, Algo_HAVAL160 and Algo_HAVAL128

Algo_RIPEMD128 

RIPEMD-160 ist eine kryptologische Hash-Funktion und wurde von Hans Dobbertin, Antoon Bosselaers und Bart Preneel in Europa entwickelt und 1996 erstmals publiziert. Es handelt sich dabei um eine verbesserte Version von RIPEMD, welcher wiederum auf den Designprinzipien von MD4 basiert und in Hinsicht auf seine Stärke und Performance dem populäreren SHA-1 gleicht.

Es existieren auch 128-, 256- und 320-Bit-Versionen dieses Algorithmus (Algo_RIPEMD128, Algo_RIPEMD256, Algo_RIPEMD320). Die 128-Bit-Version war ursprünglich als Ersatz für den RIPEMD gedacht, der ebenfalls 128 Bit stark war, aber eine fragwürdige Sicherheit bot. Die 256- und 320-Bit-Versionen reduzieren lediglich die Wahrscheinlichkeit von Hash-Wert-Kollisionen, bieten aber keine höhere Sicherheit als RIPEMD-128 oder RIPEMD-160.

Da die Entwicklung von RIPEMD-160 offener war als die von SHA-1, ist es wahrscheinlicher, dass dieser Algorithmus weniger Sicherheitslücken aufweist. Da er jedoch weniger populär ist, haben weniger Kryptologen versucht, Schwächen zu finden, was wiederum die Wahrscheinlichkeit für unentdeckte Sicherheitslücken steigen lässt.

Algo_RIPEMD160 

RIPEMD-160 ist eine kryptologische Hash-Funktion und wurde von Hans Dobbertin, Antoon Bosselaers und Bart Preneel in Europa entwickelt und 1996 erstmals publiziert. Es handelt sich dabei um eine verbesserte Version von RIPEMD, welcher wiederum auf den Designprinzipien von MD4 basiert und in Hinsicht auf seine Stärke und Performance dem populäreren SHA-1 gleicht.

Es existieren auch 128-, 256- und 320-Bit-Versionen dieses Algorithmus (Algo_RIPEMD128, Algo_RIPEMD256, Algo_RIPEMD320). Die 128-Bit-Version war ursprünglich als Ersatz für den RIPEMD gedacht, der ebenfalls 128 Bit stark war, aber eine fragwürdige Sicherheit bot. Die 256- und 320-Bit-Versionen reduzieren lediglich die Wahrscheinlichkeit von Hash-Wert-Kollisionen, bieten aber keine höhere Sicherheit als RIPEMD-128 oder RIPEMD-160.

Da die Entwicklung von RIPEMD-160 offener war als die von SHA-1, ist es wahrscheinlicher, dass dieser Algorithmus weniger Sicherheitslücken aufweist. Da er jedoch weniger populär ist, haben weniger Kryptologen versucht, Schwächen zu finden, was wiederum die Wahrscheinlichkeit für unentdeckte Sicherheitslücken steigen lässt.

Algo_RIPEMD256 

RIPEMD-160 ist eine kryptologische Hash-Funktion und wurde von Hans Dobbertin, Antoon Bosselaers und Bart Preneel in Europa entwickelt und 1996 erstmals publiziert. Es handelt sich dabei um eine verbesserte Version von RIPEMD, welcher wiederum auf den Designprinzipien von MD4 basiert und in Hinsicht auf seine Stärke und Performance dem populäreren SHA-1 gleicht.

Es existieren auch 128-, 256- und 320-Bit-Versionen dieses Algorithmus (Algo_RIPEMD128, Algo_RIPEMD256, Algo_RIPEMD320). Die 128-Bit-Version war ursprünglich als Ersatz für den RIPEMD gedacht, der ebenfalls 128 Bit stark war, aber eine fragwürdige Sicherheit bot. Die 256- und 320-Bit-Versionen reduzieren lediglich die Wahrscheinlichkeit von Hash-Wert-Kollisionen, bieten aber keine höhere Sicherheit als RIPEMD-128 oder RIPEMD-160.

Da die Entwicklung von RIPEMD-160 offener war als die von SHA-1, ist es wahrscheinlicher, dass dieser Algorithmus weniger Sicherheitslücken aufweist. Da er jedoch weniger populär ist, haben weniger Kryptologen versucht, Schwächen zu finden, was wiederum die Wahrscheinlichkeit für unentdeckte Sicherheitslücken steigen lässt.

Algo_RIPEMD320 

RIPEMD-160 ist eine kryptologische Hash-Funktion und wurde von Hans Dobbertin, Antoon Bosselaers und Bart Preneel in Europa entwickelt und 1996 erstmals publiziert. Es handelt sich dabei um eine verbesserte Version von RIPEMD, welcher wiederum auf den Designprinzipien von MD4 basiert und in Hinsicht auf seine Stärke und Performance dem populäreren SHA-1 gleicht.

Es existieren auch 128-, 256- und 320-Bit-Versionen dieses Algorithmus (Algo_RIPEMD128, Algo_RIPEMD256, Algo_RIPEMD320). Die 128-Bit-Version war ursprünglich als Ersatz für den RIPEMD gedacht, der ebenfalls 128 Bit stark war, aber eine fragwürdige Sicherheit bot. Die 256- und 320-Bit-Versionen reduzieren lediglich die Wahrscheinlichkeit von Hash-Wert-Kollisionen, bieten aber keine höhere Sicherheit als RIPEMD-128 oder RIPEMD-160.

Da die Entwicklung von RIPEMD-160 offener war als die von SHA-1, ist es wahrscheinlicher, dass dieser Algorithmus weniger Sicherheitslücken aufweist. Da er jedoch weniger populär ist, haben weniger Kryptologen versucht, Schwächen zu finden, was wiederum die Wahrscheinlichkeit für unentdeckte Sicherheitslücken steigen lässt.

Algo_TIGER128 

Tiger ist eine schneller kryptografische Hashfunktion die von Ross Anderson und Eli Biham im Jahr 1996 entwickelt wurde. Der von Tiger erzeugte Hashwert kann Längen von 128, 160 oder 192 Bit haben. Der Tiger-Algorithmus ist nicht patentiert. Die CMHash-Klasse unterstützt alle drei Bittiefen: Algo_TIGER128, Algo_TIGER160, Algo_TIGER192

Algo_TIGER160 

Tiger ist eine schneller kryptografische Hashfunktion die von Ross Anderson und Eli Biham im Jahr 1996 entwickelt wurde. Der von Tiger erzeugte Hashwert kann Längen von 128, 160 oder 192 Bit haben. Der Tiger-Algorithmus ist nicht patentiert. Die CMHash-Klasse unterstützt alle drei Bittiefen: Algo_TIGER128, Algo_TIGER160, Algo_TIGER192

Algo_TIGER192 

Tiger ist eine schneller kryptografische Hashfunktion die von Ross Anderson und Eli Biham im Jahr 1996 entwickelt wurde. Der von Tiger erzeugte Hashwert kann Längen von 128, 160 oder 192 Bit haben. Der Tiger-Algorithmus ist nicht patentiert. Die CMHash-Klasse unterstützt alle drei Bittiefen: Algo_TIGER128, Algo_TIGER160, Algo_TIGER192

Algo_GOST 

GOST ist ein in den 1970er Jahren von der Sowjetische bzw. Russischen Regierung entwickelter Hash Algorithmus, definiert im Standard "GOST 28147-89". Er galt zunächst als "Top Secret", wurde aber nach dem Ende der UdSSR im Jahr 1990 für die Öffentlichkeit freigegeben. Er war als alternative zum amerikanischen DES Algorithmus entwickelt worden, weshalb er diesem sehr ähnlich ist.

Algo_SNEFRU128 

Snefru (benannt nach dem ägyptischen Pharao Sneferu) ist eine von Ralph Merkle entwickelte kryptologische Hash-Funktion, die für beliebig lange Nachrichten einen Hash-Wert von 128 bzw. 256 Bit Länge berechnet. Eli Biham und Adi Shamir konnten mit Hilfe der differentiellen Kryptoanalyse die Unsicherheit des ursprünglichen Designs von Snefru zeigen, in dem sie Nachrichtenpaare mit gleichem Hash-Wert innerhalb von Minuten fanden.

Das Design wurde daraufhin so geändert, dass die Zahl der Wiederholungen des Hauptdurchlaufs des Algorithmus erhöht wurde. Aus Sicherheitsgründen wird der Einsatz von Snefru mit acht Durchläufen empfohlen. Allerdings ist der Algorithmus dann wesentlich langsamer als andere gängige Hash-Verfahren.

Algo_SNEFRU256 

Snefru (benannt nach dem ägyptischen Pharao Sneferu) ist eine von Ralph Merkle entwickelte kryptologische Hash-Funktion, die für beliebig lange Nachrichten einen Hash-Wert von 128 bzw. 256 Bit Länge berechnet. Eli Biham und Adi Shamir konnten mit Hilfe der differentiellen Kryptoanalyse die Unsicherheit des ursprünglichen Designs von Snefru zeigen, in dem sie Nachrichtenpaare mit gleichem Hash-Wert innerhalb von Minuten fanden.

Das Design wurde daraufhin so geändert, dass die Zahl der Wiederholungen des Hauptdurchlaufs des Algorithmus erhöht wurde. Aus Sicherheitsgründen wird der Einsatz von Snefru mit acht Durchläufen empfohlen. Allerdings ist der Algorithmus dann wesentlich langsamer als andere gängige Hash-Verfahren.

Aufzählungswerte
Bits_Default 
Bits_128 
Bits_160 
Bits_192 
Bits_224 
Bits_256 
Bits_320 
Bits_384 
Bits_512 

Beschreibung der Konstruktoren und Destruktoren

ppl6::CMHash::CMHash ( )
Beschreibung:
Bei Verwendung dieses Konstruktors werden nur einige interne Variablen initialisert. Der gewünschte Hash-Algorithmus muss mittels der Funktion CMHash::Init festgelegt werden.
ppl6::CMHash::CMHash ( Algorithm  method)
Beschreibung:
Bei Verwendung dieses Konstruktors wird die Klasse gleichzeitig mit einem bestimmten Hash-Algorithmus initialisiert, so dass die Funktion CMHash::Init nicht mehr aufgerufen werden muss.
Parameter
methodDer gewünschte Algorithmus (siehe CMHash::Algorithm)
Zu beachten
Auch wenn dieser Konstruktor verwendet wurde, kann jederzeit mit der Funktion CMHash::Init ein anderer Hash-Algorithmus ausgewählt werden.
ppl6::CMHash::~CMHash ( )
Beschreibung:
Der Destruktor gibt den intern reservierten Speicher wieder frei.

Dokumentation der Elementfunktionen

int ppl6::CMHash::AddData ( const void *  data,
size_t  size 
)
Beschreibung:
Mit dieser Funktion werden die Daten übergeben, aus denen der Hash-Wert berechnet werden soll. Die Funktion kann beliebig oft aufgerufen werden, jeder neue Datenblock wird dem Hash-Wert hinzugefügt.
Parameter
dataPointer auf den Speicherbereich mit den zu berechnenden Daten
sizeGröße des Speicherbereichs in Bytes
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
int ppl6::CMHash::AddData ( const CVar data)
Beschreibung:
Mit dieser Funktion wird der Inhalt eines von CVar-Abgeleiteten Objekts zur Berechnung des Hash-Wertes übergeben. Die Funktion kann beliebig oft aufgerufen werden, jeder neue Datenblock wird dem Hash-Wert hinzugefügt.
Parameter
dataEin von CVar abgeleitetes Objekt. Derzeit werden CString, CWString und CBinary unterstützt.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
int ppl6::CMHash::AddData ( CFileObject file)
Beschreibung:
Mit dieser Funktion wird der Hash-Wert des Inhaltes einer kompletten Datei berechnet. Dazu wird diese in 10 MB große Blöcke aufgeteilt und nach und nach eingelesen. Die Funktion kann beliebig oft aufgerufen werden, jeder neue Datenblock wird dem Hash-Wert hinzugefügt.
Parameter
fileReferenz auf ein von CFileObject abgeleitetes Objekt
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
int ppl6::CMHash::AddFile ( const char *  filename)
Beschreibung:
Mit dieser Funktion wird der Hash-Wert des Inhaltes einer kompletten Datei berechnet. Dazu wird diese in 10 MB große Blöcke aufgeteilt und nach und nach eingelesen. Die Funktion kann beliebig oft aufgerufen werden, jeder neue Datenblock wird dem Hash-Wert hinzugefügt.
Parameter
filenamePointer auf den Dateinamen. Dieser muss mit einem 0-Byte abgeschlossen sein.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
int ppl6::CMHash::GetBlockSize ( ) const
Beschreibung:
Diese Funktion liefert die Länge des gewählten Hash-Algorithmus in Bytes zurück. Die Funktion liefert nur einen brauchbaren Wert, wenn zuvor CMHash::Init aufgerufen oder der Konstruktor CMHash(Algorithm method) verwendet wurde.
Rückgabe
Bei Erfolg liefert die Funktion die Länge des Algorithmus zurück, im Fehlerfall -1.
int ppl6::CMHash::GetResult ( CVar result)
Beschreibung:
Durch Aufruf dieser Funktion wird der bis dahin berechnete Hash-Wert ausgelesen und im Objekt result gespeichert. Gleichzeitig werden die internen Datenstrukturen reinitialisiert, so dass ein weiterer Aufruf dieser Funktion fehlschlagen wird. Es kann jedoch sofort ein neuer Hash-Wert berechnet werden.
Das Ergebnis kann auf verschiedene Arten zurückgegeben werden und hängt vom Typ des result Objekts ab. Handelt es sich um ein CBinary, wird das Ergebnis im Binärformat übergeben und hat exakt die Länge des Algorithmus. Wird CString oder CWString verwendet, wird das Ergebnis als Hexadezimalwerte in lesbarer Form zurückgegeben. Bei den Algorithmen, die einen 32-Bit Wert zurückliefern (z.B. Algo_CRC32), kann auch CInt verwendet werden.
Parameter
[out]resultEin von CVar abgeleitetes Objekt, in dem das Ergebnis abgelegt werden soll. Unterstützt werden CBinary, CString, CWString und CInt. Der vorherige Inhalt des Objekts wird überschrieben.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
int ppl6::CMHash::Init ( Algorithm  method)
Beschreibung:
Mit dieser Funktion wird der gewünschte Hash-Algorithmus ausgewählt.
Parameter
methodDer gewünschte Algorithmus (siehe CMHash::Algorithm).
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, sonst 0. Falls die libmhash bei der Erstellung der Library nicht eingebunden wurde, liefert die Funktion ebenfalls 0 zurück und setzt den Fehlercode 527.
void ppl6::CMHash::Reset ( )
Beschreibung:
Falls bereits Daten mit CMHash::AddData zur Berechnung an die Klasse übergeben wurden, können die internen Datenstrukturen mit dieser Funktion wieder in den Anfangszustand zurückversetzt werden.

Dokumentation der Datenelemente

Algorithm ppl6::CMHash::algo
private
int ppl6::CMHash::blocksize
private
ppluint64 ppl6::CMHash::bytesHashed
private
void* ppl6::CMHash::handle
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: