【问题标题】:Can the hash of 2 different inputs be the same?2个不同输入的哈希值可以相同吗?
【发布时间】:2018-11-05 22:31:28
【问题描述】:

根据我的理解,散列是一个生成唯一固定长度(假设为 64 位)输出到任意长度输入的过程。 (如有错误请指正)

因此,如果我采用散列函数可以产生的所有 (x) 个可能的 64 位散列值并在其末尾附加 0 或 1。我得到一个大小为 2x 的列表(其中每个哈希为 65 位长)。

如果我将所有 2x 组合作为相同哈希函数的输入,它如何为所有输入生成唯一哈希?

【问题讨论】:

    标签: hash cryptography


    【解决方案1】:

    你是对的。这被称为哈希冲突,它是真实的。这不是一个更大的交易的原因是哈希的数量非常大,以至于这些类型的冲突很少见。不过,您的 64 位示例有点不切实际。 256 位或 512 位是更可能的情况。 (即使是 128 也不再被认为足够强。)在这种情况下,哈希的范围是如此之大,以至于很难找到产生哈希冲突的输入。

    【讨论】:

    • 那么根据这个原则,如果猜测的密码产生与真实密码的哈希码相同的哈希码,那么仍然有机会(即使很小)有人可以用猜测的密码访问您的帐户?
    • @nicoqueijo 是的,我也考虑过这一点,例如您的密码非常复杂 543ğüşiöç%&{} 但对于一个简单的短语,它可能具有相同的哈希值(可能性很小但可能?)
    【解决方案2】:

    通过Pigeonhole principle,哈希冲突是不可避免的。即 m1 != m2 和 H(m1) = H(m2)

    您不能为输入生成唯一的哈希值。发生碰撞的概率非常小。甚至,在 2^64 个可能的值内,具有 64 位输出的哈希函数也可能发生冲突。

    最好使用像 SHA3 这样的哈希函数,如果您真的希望它们是唯一的,请与您之前生成的哈希值进行比较。

    • SHA3 系列可以生成 224、256、384 或 512 位输出。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多