3

出于研究目的,找出我可以用自身组合多少次 md5 函数而不获得相同的值会很有用。

这是盐的并行/互补方法,因为这样使用蛮力破解值变得更加困难。

4

1 回答 1

4

看似无限。然而 MD5 已被证明不具有抗碰撞性,因此在某些时候您将有一个副本。

以下 Ruby 代码将循环应用 MD5 哈希算法,直到检测到重复项,此时它将打印到达重复点所需的循环数。原始字符串是从字母字符随机生成的。

require 'set'
require 'digest'

keys = Set.new

o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten
string = (0...10).map{ o[rand(o.length)] }.join
count = 0

while !keys.include?(string) do
  count += 1
  puts count
  keys << string
  string = Digest::MD5.digest(string)
end

puts "#{count}"

这将继续运行超过 1500 万个周期...一旦找到重复项,我将更新。

更新:由于我的机器资源有限,我不得不在 75,933,338 次循环后停止上述脚本而没有发生冲突(该组在内存中分配了约 8 GB)

于 2013-09-27T19:16:18.270 回答