2017-05-28 7 views
0

Ich möchte eine CRC16-Hash-Funktion schreiben, die zwei Eingaben und generiert einen Hash-Wert von ihnen. Die aktuellen Implementierungen berechnen nur eine Eingabe.CRC16-Hash-Funktion, die Hash-Wert aus zwei Eingaben berechnet

Strom: CRC16 (input_value)

benötigt: CRC16 (input_value1, input_value2) kann

Eine Lösung, die den Hash-Wert für jeden Eingang separat Berechnung sein und sie dann xor. Ich weiß jedoch nicht, wie sich die Zufälligkeit auswirkt. Ist XORing genug, oder sollte ich einen anderen Ansatz wählen?

+0

[Cyclic Redundancy Check Algorithmen] (https : //en.wikipedia.org/wiki/Cyclic_redundancy_check) verarbeitet eine Bitfolge und führt zu einer Hash-Signatur. Also muss Ihr "input_value" eine Sequenz von Bits (oder Bytes) sein. Um zwei Eingaben zu verarbeiten, könnten Sie sie verketten und somit zu einer Sequenz zusammenfassen. Um zwei Hashes und 'XOR' zu berechnen, sollten sie auch für praktische Zwecke in Ordnung sein. –

+0

Ich bin mir ziemlich sicher, dass du auf diese Weise die Eigenschaften von CRC verlieren wirst. Warum würden Sie einen CRC berechnen, wenn Sie ihn nicht benutzen können? Beachten Sie, dass CRC nicht "nur" eine Hash-Funktion ist, sondern eine sehr spezifische Hash-Funktion für ein ganz bestimmtes Ziel: Es ist ein Fehlerkorrektur- und Erkennungscode. Insbesondere ist es * keine * kryptographisch sichere Hash-Funktion wie SHA-3. In der Tat ist es * einfach *, Vorabbilder, Längenverlängerungen usw. zu berechnen. –

Antwort

0

Eine vollständigere Beschreibung einer CRC-Funktion wäre:

new_crc_value = crc16(previous_crc_value, input_value) 

Dann zwei Eingangswerte zu verarbeiten, können Sie sie einfach in Reihenfolge ab:

new_crc_value = crc16(crc16(previous_crc_value, input_value1), input_value2) 
Verwandte Themen