【发布时间】: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 这样的加密安全散列函数。事实上,通过设计很容易计算原像、长度扩展等。