Ist es ein glibc-hash-Funktion?
Ich bin auf der Suche für eine benutzerdefinierte hash-Tabelle Implementierung in C. gibt es eine MD5/SHA1-hash-Funktion bereits in die GNU library oder muss ich eine externe Bibliothek dafür?
Hier ist irgendwie das, was ich Suche:
int hashValue;
hashValue = MD5_HASH(valToHash);
- Selbst wenn es war, würden Sie zu Durchlaufen haben, eine Länge der parameter zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen Blick auf Bob Jenkin ' s Erhebung und Analyse der vielen hash-Funktionen:
Oder nur drop seine lookup3 Routinen (die er in der public domain) in Ihrem Projekt:
Für eine hash-Tabelle, die Sie nicht brauchen kryptographische Stärke, nur gute Randomisierung Eigenschaften. Gebrochen kryptographische hash-Funktionen (z.B. MD5) sind in Ordnung, aber Sie verwenden möchten, können MD4, die sowohl schneller und einfacher, bis zu dem Punkt, dass Sie könnte einfach eine Implementierung direkt in Ihrem code. Es ist nicht schwer zu umschreiben, dass es von den Spezifikationen (und da willst du nur eine Funktion für eine hash-Tabelle, ist es nicht wirklich ein problem, wenn man Sie falsch an einem gewissen Punkt). Shameless plug: es ist ein optimiertes C-Implementierung von MD4 in sphlib.
Es sei denn, Sie haben bereits einen guten Grund für die Verwendung von MD5, möchten Sie vielleicht zu überdenken. Was macht eine "gute" hash-Funktion eine hash-Tabelle ist ziemlich abhängig von, was Sie versuchen zu erreichen. Möchten Sie vielleicht Lesen Sie die Kommentare in Python
dictobject.c
zu sehen, die möglichen Kompromisse, die andere gemacht haben.Gibt es ein paar vertraute, einfache Versionen verfügbar -- ich habe ein paar in den Quellen des digest für R.
Hier ist, was ich schrieb in die BESCHREIBUNG Datei:
Ich denke, dass einige von Christophe code nicht mehr an cr0.net aber sucht sollte führen Sie mehrere andere Projekte einfließen. Seine Datei-Header wurden ziemlich klar:
und seinem code entspricht dem Referenz-Ausgang.
Glibc ist
crypt()
verwendet eine MD5-basierte algorhytm wenn das Salz beginnt mit $1$. Aber da Sie erwähnen, dass Sie tun werden, eine hash-Tabelle Umsetzung, vielleicht Jenkins hash wäre besser geeignet.Die OpenSSL-Bibliothek hat alle crypto-Routinen, die Sie jemals wollen, einschließlich kryptografischer hashes.
gcrypt und openssl tun können, MD5, SHA und andere hashes, hier ein Beispiel mit libgcrypt:
`
Murmur3 ist eine schnelle noncryptographic-Algorithmus, die Sie verwenden können.
Einer guten Geschwindigkeit vergleichen von Murren gegen andere algorithmen können in diesem thread gefunden werden https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed
Einer möglichen Umsetzung: https://github.com/PeterScott/murmur3
Beispiel: