sha & md5 字符串长度相等时发生冲突

问题描述

我知道 md5 和 sha512 等...是不安全的,因为它们可能会发生冲突。

但是,如果字符串长度相同,是否仍然可能发生冲突?

即。为了进行身份验证,它会检查密码的长度以及它是否与 md5 / sha 密码哈希匹配。

换句话说,如果我有十位密码:a123456789

任何其他 10 个字母/数字/特殊字符 md5/sha 哈希是否会碰撞并相同?

如果是,如果它们只是字母数字,它们还会碰撞吗?你能举个例子吗?

我读过的所有冲突似乎都是两个 PDF 或类似的,但这往往是有道理的。我认为如果被散列的输入长度相等并且少于 100 个字符,我认为应该没有冲突。

有兴趣听听对此的看法。

解决方法

如果一个散列是不安全的,因为它可能有冲突,那么所有散列都是不安全的。当被散列的数据长度大于散列输出的长度时,任何散列都可以通过鸽巢原理保证发生冲突。

如果您要问,那么通过限制数据的大小使其不超过哈希值,这是否意味着不会发生冲突?我认为这取决于哈希算法。考虑一个散列,它简单地将每个数据字节的值加在一起,形成一个任意大小的整数,该整数可以具有与输入数据长度一样多的位。当然,也会有数据序列相加得到相同的哈希值,尽管数据长度不超过哈希长度。

让散列变得安全的并不是没有冲突——而是在给定所需散列的情况下,您可以计算出能够提供该散列的值的可能性非常非常低。

如果你真的想要一个不产生冲突的散列,那么你可以使用加密。加密输入,并像使用散列一样使用输出,可以让您实现零冲突。