关于穷举一个字符串的 MD5 是他自己的想法

2016-10-04 20:59:24 +08:00
 liqingcan

前几天看了站中的一个帖子传送门 简单的说就是一个文本文件中的内容是这个文件的 md5 ,有没有可能找出这个 md5 值,然后我好奇心就起来了,于是我想动手验证一下。 我一开始的想法是,创建一个文本文件,然后计算他的 md5 ,但是感觉频繁的创建文件好像有点伤硬盘,于是我就试验了一下,直接计算一个字符串的 md5 和将这个字符串放在文本文件中在计算 md5 是不是一样。如果一样的话我就不用频繁创建文件了,经过试验这个是可行的。 然后我就写了一小段 python 的脚本来进行验证。 代码:

import hashlib
import time

if __name__=="__main__":
    i=0
    md5 = format("%f"%time.time())
    while(True):
        i = i+1
        m=hashlib.md5()
        m.update(md5.encode("utf8"))
        temp = m.hexdigest()
        print("%d\t%s md5-> %s"%(i,md5,temp))
        if(temp==md5):
            print("找到一个相同的了,回车继续")
            print(md5)
            input()
            md5 = temp+format("%f"%time.time())
        else:
            md5 = temp

简单的说,就是先取当前时间作为初始字符串,然后计算 md5 接着将计算出来的 md5 再计算,一直循环到找到一样的,然后我就放到了一台闲置的腾讯云的主机上跑了十几个小时

跑了有快 4 千万条数据了。 然后我现在就在想,我这个方法有没有可能进入死循环啊?

5230 次点击
所在节点    问与答
50 条回复
yangff
2016-10-05 23:42:10 +08:00
@sneezry 另外,这玩意大概可以叫不动点迭代……
当然你抠着脚趾头都知道这玩意不一定能收敛……
sneezry
2016-10-05 23:56:47 +08:00
@yangff 哈哈,这个说到点上了, md5 是离散函数。算我偷换概念,离散函数就谈不上牛顿逼近。学艺不精,惭愧
twl007
2016-10-06 04:14:37 +08:00
我记得山大的王小云不就是做这个的么 = = 貌似叫 hash 碰撞?好像她的论文公开了吧?
herozhang
2016-10-06 08:59:15 +08:00
prefix 12:
54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762

suffix 12:
df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78

ref:https://plus.google.com/+ThomasEgense/posts/SRxXrTMdrFN
herozhang
2016-10-06 09:03:56 +08:00
可以先从 CRC 开始尝试,然后是 MD5 、 SHA 系列
哈哈
ipwx
2016-10-06 09:33:27 +08:00
@twl007 @herozhang 你们再仔细读一遍楼主的帖子再说。
ryd994
2016-10-06 11:02:52 +08:00
@loveyu 不可能,看我 29 楼的
大约是 10^23 年
我今天用 C 和 OpenSSL 写了一下,单核大约 5-10M hash/s
和上面的数据差不多
也就是说,就算地球上人手一台电脑跑着,大概也可以考虑一下人类灭亡之类的事情了
loveyu
2016-10-06 15:16:23 +08:00
@ryd994 现在的确不大可能,不过以后的计算速度上来了也许就有希望了!
sutra
2016-10-06 17:47:44 +08:00
直接查彩虹表吧。
GoForce5500
2016-10-07 21:41:24 +08:00
@ryd994 经过将近八千亿次运算已弃坑……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX