1
dhb233 271 天前
虽然不知道哪个效果更好,但是你这说的是 32 位吧。。。
|
2
dode 271 天前
八个字母还是八个字节,Base64 重新编码一下存的更多
|
3
bigfei 271 天前
感觉 CRC32 更好,GPT4 回答如下:
所有三种哈希函数( SHA256 ,SHA512 和 CRC32 )都被设计为对输入的微小变化做出显著反应,这种属性被称为雪崩效应。在对输入变化的敏感性方面,像 SHA256 和 SHA512 这样的加密哈希函数被设计为即使在输入的单个比特差异下也会发生剧变。虽然 CRC32 不是加密哈希,但它也具有良好的雪崩效应,用于错误检测。 然而,如果我们只考虑哈希输出的最后 8 个字母数字字符,由于输出空间的减小,对变化的敏感性变得更微妙。这是因为我们将哈希输出截断到较小的大小,这增加了冲突的可能性(不同的输入产生相同的输出)。 从信息理论的角度来看,考虑到每个字母数字字符可以代表 16 个可能的值(因为我们使用十六进制表示),所以 8 个字符代表$16^8$或约 43 亿的可能性。 鉴于此,如果我们严格地谈论对小输入变化的敏感性,CRC32 可能实际上在最后 8 个字符中显示出最大的变化,因为它的整个输出空间都适合这 8 个字符。另一方面,SHA256 和 SHA512 有更大的输出空间,所以输入的小变化可能会导致哈希输出的其他部分发生变化,而不一定是最后 8 个字符。 但是需要注意的是,这并不意味着 CRC32 在更广泛的意义上是"更好"的。它不适合安全敏感的应用,甚至在对变化的敏感性方面,将像 SHA256 或 SHA512 这样的加密哈希截断到最后 8 个字符也不是理想的做法。 |
4
tool2d 271 天前
写一个程序测一下就知道了,但是 8 位很容易碰撞。
我以前写过一些测试代码,碰撞差距不大,区别大的是计算时间。 哈希算法 A, 2000 万随机数,冲撞 count=46571, time=8.877379 哈希算法 B, 2000 万随机数,冲撞 count=45767, time=8.6227 哈希算法 C, 2000 万随机数,冲撞 count=46186, time=7.530662 哈希算法 D, 2000 万随机数,冲撞 count=44959, time=21.00468 哈希算法 E, 2000 万随机数,冲撞 count=46506, time=8.168545 哈希算法 F, 2000 万随机数,冲撞 count=46430, time=7.029362 哈希算法 G, 2000 万随机数,冲撞 count=46205, time=7.259135 |
5
mxT52CRuqR6o5 271 天前
我感觉 CRC32 最容易无意重复吧,修改正好抵消就重复了
|
6
cnbatch 271 天前
CRC32“全 8 位”? CRC8 才是全 8 位呀,CRC32 明明是全 32 位。
我猜 OP 是想表达 16 进制时的“8 个字母”吧。 如果是真实的“全 8 位”,而不是 OP 所指的“8 个字母”,那么无论怎么选都很容易重复。 |
7
drymonfidelia OP @cnbatch 8 位 16 进制,说错了
|