Hash-Funktion zu Erzeugen 16 Alphanumerische Zeichen aus Input-String in C#
Brauche ich eine Funktion zum empfangen einer Eingabe-Zeichenfolge, unabhängig von seiner Länge-und-Ausgabe eine fix Länge von 16 Zeichen 0-9A-Z. Die Funktion hat dieselbe Ausgabe, wenn die Eingabe von den gleichen string.
Jede Anregung? Dank
Beachten Sie, dass solchen kurzen hash kann nicht verhindern, dass bewusste Kollisionen. Kosten sollten sich auf etwa 2^42 hash-Aufrufe, das ist durchaus machbar. Zufällige Kollisionen sollten selten sein, solange Sie weniger als eine Milliarde oder so hashes.
InformationsquelleAutor Buzz | 2015-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie so etwas wie:
SHA256Managed
generiert einen hash-Wert von 32 bytes. Dann mit der%
(modulo) - operator, wir wählen ein char für jedes byte. Beachten Sie, dass wir verschwenden viele bits in dieser Art und Weise, aber es ist nicht wirklich wichtig, denn wir haben viel mehr bits als die, die wir brauchen (wir brauchenlog2(36) * 16 == 82.7
haben wir 256 bit hash)Beachten Sie, dass dieser Ansatz führt auf eine Verzerrung in der Ausgabe. Die ersten paar Ziffern werden häufiger als die anderen Charaktere. Glücklicherweise sollte dies nicht dazu führen praktische Schwächen für die meisten Anwendungsfälle.
Ich wurde gefragt, warum... Aber dann merkte ich... 256 / 36 = 7 mit einem Rest von 4... Die 4 🙂
InformationsquelleAutor xanatos
Wenn Sie möchten, erstellen Sie eine hash-Sie in Aussehen sollte hash-algorythms. Eine meist bekannt ist MD5 aber das ist ein 128bits hash algorythm. Das bedeutet, wenn Sie konvertieren Sie die raw-bytes in einem hex-string wird es 32chars lang (wie die meisten Menschen wissen) also das heißt, Sie brauchen eine hash-Funktion, die ist 64bits. Ich habe eine schnelle Suche und stieß auf SipHash (http://en.wikipedia.org/wiki/SipHash) und dann fand ich eine C# - Implementierung (https://github.com/BrandonHaynes/siphash-csharp)
Wenn Sie die SipHash algorythm sollten Sie ein 16char string der Länge.
InformationsquelleAutor Murf
Versuchen, diese, verwendet es die MD5Hash-Algorithmus.
InformationsquelleAutor imlokesh
Können Sie mit LINQ:
Siehe auch: RNGCryptoServiceProvider-Klasse
Oder Sie können versuchen, diese:
Es scheint, es schafft eine zufällige hash-string. Ich brauche die Ausgabe ist ein fix-length string, erstellt auf Basis einer nicht-fix-Länge der Eingabe-Zeichenkette. Also die Ausgabe sollte nicht nur eine zufällige. Es sollte immer dieselbe Ausgabe, wenn die Eingabe gleich. Es ist wie ein Kennwort hash, aber der Ausgang sollte auf 16 Personen begrenzt char und akzeptieren nur 0-9 und A-Z.
Sie beheben können die Länge wie dieser:
Guid.NewGuid().ToString().Substring(0, 16);
InformationsquelleAutor Rahul Tripathi