Ich suchte nach md5 für C ++, und ich weiß, dass md5 nicht eingebaut ist (obwohl es viele sehr gute Bibliotheken gibt, die die md5-Funktion unterstützen). Dann realisierte ich, dass ich MD5 nicht wirklich brauche, irgendeine Hashing-Methode wird es tun. Daher habe ich mich gefragt, ob C ++ solche Funktionen hat? Ich meine, eingebaute Hash-Funktionen?
Während ich nach C ++ forschte, sah ich, dass Java, PHP und einige andere Programmiersprachen md5 unterstützen. Zum Beispiel müssen Sie in PHP einfach aufrufen: md5("your string");
.
Eine einfache Hash-Funktion wird ausreichen. (Wenn möglich, fügen Sie bitte einen einfachen Code zur Verwendung bei.)
Das ist einfach. Mit C ++ 11 erhalten Sie ein
%Vor%funktor was Sie so verwenden können (ungetestet, aber gibt Ihnen die Idee):
%Vor% Wenn Sie C ++ 11 nicht haben, schauen Sie sich boost an, vielleicht boost::tr1::hash_map
. Sie bieten wahrscheinlich auch eine String-Hash-Funktion.
Für sehr einfache Fälle können Sie mit etwas in dieser Richtung beginnen:
%Vor% Um den Kommentar unten aufzunehmen. Um zu verhindern, dass kurze Zeichenfolgen gruppiert werden, möchten Sie möglicherweise h
anders initialisieren. Vielleicht kannst du die Länge dafür verwenden (aber das ist nur meine erste Idee, unbewiesen):
Das sollte nicht schlimmer sein als vorher, aber immer noch weit von perfekt.
Es hängt davon ab, welche Version von C ++ Sie haben ... und welche Art von Hashfunktion Sie suchen.
C ++ 03 hat keinen Hashing-Container und benötigt daher kein Hashing. Einige Compiler haben jedoch benutzerdefinierte Header vorgeschlagen. Andernfalls kann Boost.Functional.Hash helfen.
C ++ 0x hat die unordered_
-Familie von Containern und somit ein std::hash
-Prädikat, das bereits für C ++ - Standardtypen (eingebaute Typen und std::string
, zumindest) funktioniert.
Dies ist jedoch ein einfacher Hash, gut genug für Hash-Maps, nicht für die Sicherheit .
Wenn Sie nach kryptografischem Hash suchen, dann ist das Problem völlig anders (und md5 ist looyy), und Sie benötigen eine Bibliothek für (zum Beispiel) einen SHA-2-Hash.
Wenn Sie Geschwindigkeit suchen, besuchen Sie CityHash und MurmurHash . Beide haben Einschränkungen, aber sie sind stark optimiert.