【发布时间】:2014-10-15 21:26:00
【问题描述】:
我正在尝试复制以下 python 代码来验证“What's the shortest pair of strings that causes an MD5 collision?”的答案中给出的 md5 冲突。
>>> from array import array
>>> from hashlib import md5
>>> input1 = array('I', [0x6165300e,0x87a79a55,0xf7c60bd0,0x34febd0b,0x6503cf04,
0x854f709e,0xfb0fc034,0x874c9c65,0x2f94cc40,0x15a12deb,0x5c15f4a3,0x490786bb,
0x6d658673,0xa4341f7d,0x8fd75920,0xefd18d5a])
>>> input2 = array('I', [x^y for x,y in zip(input1,
[0, 0, 0, 0, 0, 1<<10, 0, 0, 0, 0, 1<<31, 0, 0, 0, 0, 0])])
>>> input1 == input2
False
>>> md5(input1).hexdigest()
'cee9a457e790cf20d4bdaa6d69f01e41'
>>> md5(input2).hexdigest()
'cee9a457e790cf20d4bdaa6d69f01e41'
如何在 Ruby 中处理 input1 和 input2? Digest::Md5 似乎不接受数组。
【问题讨论】:
-
“过程”是什么意思?你的原始数据是什么格式的?
String#unpack函数可能是一个不错的起点。 -
我的意思是像python代码
md5(input1)那样做。它不适用于Digest::MD5它只接受字符串。 -
然后从您的输入中创建一个字符串。您可以使用
Array#pack来构建它们。