【问题标题】:CRC16 hash function that calculates hash value from two inputs从两个输入计算哈希值的 CRC16 哈希函数
【发布时间】:2017-10-28 17:59:15
【问题描述】:

我想编写一个 CRC16 哈希函数,它接受两个输入并从中生成一个哈希值。当前的实现计算只需要一个输入。

当前: crc16(input_value)

必填: crc16(input_value1, input_value2)

一种解决方案可以是分别计算每个输入的哈希值,然后对它们进行异或运算。但是,我不知道对随机性有什么影响。异或是否足够,或者我应该采取另一种方法?

【问题讨论】:

  • Cyclic Redundancy Check algorithms 处理一系列位并产生哈希签名。因此,您的“input_value”必须是位(或字节)序列。要处理两个输入,您可以将它们连接起来,从而将它们组合成一个序列。为了实际目的,计算两个哈希并将XOR 合二为一也应该没问题。
  • 我很确定你会以这种方式失去 CRC 的属性。如果无论如何都不能使用它,为什么还要计算 CRC?请注意,CRC 不仅仅是一个散列函数,它是一个非常具体的散列函数,用于一个非常具体的目标:它是一个纠错和检测代码。特别是,它不是像 SHA-3 这样的加密安全散列函数。事实上,通过设计很容易计算原像、长度扩展等。

标签: hash xor crc16


【解决方案1】:

更完整的 CRC 函数描述如下:

new_crc_value = crc16(previous_crc_value, input_value)

然后要处理两个输入值,您只需按顺序处理它们:

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

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 2016-06-23
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2018-04-17
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多