V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  程序员

SHA256 末 8 位、SHA512 末 8 位、CRC32 全 8 位 在对原文进行小幅修改后哪个更不容易无意重复?只有 8 位的情况下有意碰撞都很容易,因此不考虑有意碰撞的情况

  •  
  •   drymonfidelia · 260 天前 · 1231 次点击
    这是一个创建于 260 天前的主题,其中的信息可能已经有所发展或是发生改变。
    7 条回复    2024-03-01 16:21:40 +08:00
    dhb233
        1
    dhb233  
       260 天前
    虽然不知道哪个效果更好,但是你这说的是 32 位吧。。。
    dode
        2
    dode  
       260 天前
    八个字母还是八个字节,Base64 重新编码一下存的更多
    bigfei
        3
    bigfei  
       260 天前
    感觉 CRC32 更好,GPT4 回答如下:

    所有三种哈希函数( SHA256 ,SHA512 和 CRC32 )都被设计为对输入的微小变化做出显著反应,这种属性被称为雪崩效应。在对输入变化的敏感性方面,像 SHA256 和 SHA512 这样的加密哈希函数被设计为即使在输入的单个比特差异下也会发生剧变。虽然 CRC32 不是加密哈希,但它也具有良好的雪崩效应,用于错误检测。

    然而,如果我们只考虑哈希输出的最后 8 个字母数字字符,由于输出空间的减小,对变化的敏感性变得更微妙。这是因为我们将哈希输出截断到较小的大小,这增加了冲突的可能性(不同的输入产生相同的输出)。

    从信息理论的角度来看,考虑到每个字母数字字符可以代表 16 个可能的值(因为我们使用十六进制表示),所以 8 个字符代表$16^8$或约 43 亿的可能性。

    鉴于此,如果我们严格地谈论对小输入变化的敏感性,CRC32 可能实际上在最后 8 个字符中显示出最大的变化,因为它的整个输出空间都适合这 8 个字符。另一方面,SHA256 和 SHA512 有更大的输出空间,所以输入的小变化可能会导致哈希输出的其他部分发生变化,而不一定是最后 8 个字符。

    但是需要注意的是,这并不意味着 CRC32 在更广泛的意义上是"更好"的。它不适合安全敏感的应用,甚至在对变化的敏感性方面,将像 SHA256 或 SHA512 这样的加密哈希截断到最后 8 个字符也不是理想的做法。
    tool2d
        4
    tool2d  
       260 天前
    写一个程序测一下就知道了,但是 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
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       260 天前
    我感觉 CRC32 最容易无意重复吧,修改正好抵消就重复了
    cnbatch
        6
    cnbatch  
       260 天前
    CRC32“全 8 位”? CRC8 才是全 8 位呀,CRC32 明明是全 32 位。
    我猜 OP 是想表达 16 进制时的“8 个字母”吧。

    如果是真实的“全 8 位”,而不是 OP 所指的“8 个字母”,那么无论怎么选都很容易重复。
    drymonfidelia
        7
    drymonfidelia  
    OP
       260 天前
    @cnbatch 8 位 16 进制,说错了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2598 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:42 · PVG 18:42 · LAX 02:42 · JFK 05:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.