Ich arbeite an einem .NET 3.5-Projekt und ich brauche einen 32-Bit-Hash-Wert. Es scheint keine Methoden in den .NET Cryptography-Klassen zu geben, die einen 32-Bit-Hash zurückgeben (MD5 ist 128 Bit, SHA1 ist 160 Bit usw.). Ich habe eine CRC32-Klasse implementiert, aber ich finde, dass die SHA1- und MD5-Hashfunktionen, die bereits existieren, viel schneller sind.Sind die ersten 32 Bits eines 160-Bit-SHA1-Hash ein akzeptabler Ersatz für einen CRC32-Hash?
Wäre es ein Problem (d. H. Erhöhte Wahrscheinlichkeit von Kollisionen) mit mir mit der SHA1-Hash-Funktion und nur die ersten 32 Bits abzubrechen, um als Hash-Wert zu speichern?
Was machst du, dass du nicht den ganzen 20 Zeichen SHA-1 Hash speichern kannst? Außerdem ist CRC32 kein Hash, es ist ein Mechanismus zur Erkennung von Übertragungsfehlern. Wenn Sie also eine Fehlererkennung benötigen, ist ein Hash-Verfahren nicht die richtige Vorgehensweise. – jmucchiello
Der 4-Byte-Hash wurde gewählt, um Platz zu sparen. Der Hash wird für Prüfsummen-Datenblöcke verwendet, die von einem Überwachungsgerät kommen, und es können 10 Millionen von ihnen vorhanden sein. Wir werden sehen, vielleicht wird das Speichern der ganzen Sache kein Problem sein. Sie sagten etwas Interessantes. Was genau ist der Unterschied zwischen einem "Übertragungsfehlererkennungsmechanismus" und einem Hash? Kryptographische Stärke (diese spezielle Anwendung benötigt das nicht)? – raven
Shameless Selbst Stecker: cmdhashgen unterstützt CRC32 und wird von HashAlgorithm abgeleitet, so kann es nur die gleiche Art und Weise wie die andere verwendet werden, Crc32.cs überprüfen: http://cmdtools.codeplex.com/ –