2017-05-28 293 views
0

我想寫一個CRC16哈希函數,它接收兩個輸入並從它們生成一個哈希值。目前的實現計算只需要一個輸入。CRC16哈希函數,用於計算來自兩個輸入的哈希值

電流: CRC16(將input_value)

需要: CRC16(input_value1,input_value2)

一種解決方案可以是單獨計算每個輸入的哈希值,然後異或它們。但是,我不知道會對隨機性產生什麼影響。異或足夠了,還是我應該採取另一種方法?

+0

[循環冗餘校驗算法](HTTPS ://en.wikipedia.org/wiki/Cyclic_redundancy_check)處理一系列比特併產生散列簽名。所以,你的「input_value」必須是一個比特序列(或字節)。要處理兩個輸入,可以將它們連接起來,從而將它們合併爲一個序列。要計算兩個哈希和'XOR',它們合併爲一個實際應用也不錯。 –

+0

我很肯定你會以這種方式失去CRC的屬性。如果無法使用它,爲什麼要計算一個CRC?請注意,CRC不僅僅是一個散列函數,它是一個非常具體的散列函數,用於一個非常具體的目標:它是一個錯誤校正和檢測代碼。特別是,它不是像SHA-3那樣的密碼安全散列函數。事實上,通過設計*很容易計算預先圖像,長度擴展等。 –

回答

0

的更完整的CRC函數的描述將是:

new_crc_value = crc16(previous_crc_value, input_value) 

然後處理兩個輸入值,只需處理它們在序列:

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