Miqayel Asked:2020-05-13 07:55:26 +0800 CST2020-05-13 07:55:26 +0800 CST 2020-05-13 07:55:26 +0800 CST md5如何才能正常工作? 772 如果你取任何字符串并 md5 它 36^32 次(md5 字符串的数量),然后结果将开始重复。事实证明,例如,来自“hello”的 md5 匹配另一个单词的 md5。我哪里错了? хеширование 2 个回答 Voted Zergatul 2020-05-13T08:57:01+08:002020-05-13T08:57:01+08:00 按照计划,散列函数的结果不应与随机数不同。这意味着循环可以在任意次数的迭代后开始n,其中1 <= n <= 2^128. 很有可能有x这样一条线md5(x) = x。 哈希函数循环没有任何问题,从概率论的角度来看,这是预期的行为。 Best Answer Mike 2020-05-13T16:29:48+08:002020-05-13T16:29:48+08:00 MD5 与所有其他哈希一样,旨在快速估计一个字符串很可能是相同的。同时存储少量信息(16字节)。确切字符串相等的唯一证明只能是原始字符串或其图像在明确编码后的比较,例如归档算法的压缩。但是不可能在不丢失信息的情况下无限期地压缩字符串。 当您需要以可接受的准确度估计您拥有相同的文件(1 GB 大小)而不存储文件本身时,散列是唯一的出路。如果您认为 MD5 中的冲突概率对于您的任务来说太高,请同时使用一个或多个不同的哈希值。但当然,您只会减少出错的机会。 并且多次将 md5 应用于另一个 md5 的结果没有任何意义。如果两个字符串的 md5 最初相等,那么执行多次的也将相等。在这种情况下,反向(通过多次重复 md5 确定对象的相等性)以非常高的概率起作用,但不再保证,因为可能有两个 16 字节的序列会给出相同的 md5。
按照计划,散列函数的结果不应与随机数不同。这意味着循环可以在任意次数的迭代后开始
n
,其中1 <= n <= 2^128
. 很有可能有x
这样一条线md5(x) = x
。哈希函数循环没有任何问题,从概率论的角度来看,这是预期的行为。
MD5 与所有其他哈希一样,旨在快速估计一个字符串很可能是相同的。同时存储少量信息(16字节)。确切字符串相等的唯一证明只能是原始字符串或其图像在明确编码后的比较,例如归档算法的压缩。但是不可能在不丢失信息的情况下无限期地压缩字符串。
当您需要以可接受的准确度估计您拥有相同的文件(1 GB 大小)而不存储文件本身时,散列是唯一的出路。如果您认为 MD5 中的冲突概率对于您的任务来说太高,请同时使用一个或多个不同的哈希值。但当然,您只会减少出错的机会。
并且多次将 md5 应用于另一个 md5 的结果没有任何意义。如果两个字符串的 md5 最初相等,那么执行多次的也将相等。在这种情况下,反向(通过多次重复 md5 确定对象的相等性)以非常高的概率起作用,但不再保证,因为可能有两个 16 字节的序列会给出相同的 md5。