是否可以使用非加密哈希来指纹数据块?

Edm*_*iak 5 hash file

我的问题是这个.我有一块数据.有时会更新此数据块并显示新的更改版本.我需要检测我正在查看的数据是否与我期望收到的版本相匹配.

我决定使用指纹,以便我可以避免完整地存储"预期"版本的数据.似乎这种事情的'默认'选择是MD5哈希.

但MD5的设计是加密安全的.散列函数有更快的速度.我正在寻找现代的非加密函数,如CityHash和SpookyHash.

由于我控制系统中的所有数据,我只关心意外碰撞,其中更改的数据块散列到相同的值.因此,我认为我不必担心加密哈希的"攻击者证明"性质,并且可以使用更简单的哈希函数.

使用诸如CityHash或SpookyHash之类的哈希函数是否存在任何问题,或者我应该坚持使用MD5?或者我应该使用专门用于指纹识别的东西,如拉宾指纹?

Dai*_*Dai 1

是的,没关系(还可以看看更快的 CRC 系列函数)。然而,我倾向于避免使用哈希来区分数据,使用序列号与日期/时间值相结合提供了一种方法来确定哪个版本较新并检测不同步的更改。指纹更多地用于检测损坏的文件而不是版本控制。

如果您想将一组数据与另一组数据进行比较,则不要使用哈希/指纹,只需直接比较数据即可。比较两个流比获取两个流的散列然后比较散列要快。

也就是说,比较大量文件的一个快速方法是获取每个文件的哈希值,然后比较哈希值,当存在​​哈希匹配时,然后比较原始字节。哈希冲突的可能性确实很小,但这并非不可能——而且我想绝对确定。