2017-09-21 47 views
0

我需要找到“最后6个字节的SHA-1摘要”的冲突。这里是我的Python代码(已经删除了不相关的部分):使用这段代码我能找到6字节的sha-1多长时间?

import hashlib 
import os 
import binascii 

start_string = os.urandom(20) 
x0 = binascii.hexlify(start_string) 

hash_value = hashlib.sha1(x0) 
x1 = hash_value.hexdigest() 

while x0[28:]!=x1[28:]: 
    x0 = x1 
    x1_hash = hashlib.sha1(x0) 
    x1 = x1_hash.hexdigest() 
else: 
    print x0 
    print x1 

我使用的是Thinkpad的笔记本T400(英特尔酷睿2双核2.8GHz的,6 MB二级高速缓存,800 MHz)的。它能发现碰撞多久?无论如何改进代码,使其更快? (this Python)

回答

1

6字节的数据是2 (281474976710656)的可能性。预计平均约有一半的支票会发生碰撞,所以大约有140万亿。我在我的机器上每秒钟获得大约200000次SHA1/hexdigest操作(使用Python),所以我期望大约22年的运行时间。

如果没有特别要求碰撞是两个连续的摘要之间您生成,可以极大地打击先前生成的摘要(让他们在一组或字典的所有检查进程加快)。 (查看“生日悖论”,了解这有多大帮助的详细信息。)这会很快耗尽内存,但除非您的笔记本电脑安装了绝对最小的内存,否则很可能在此之前发现冲突。假设有1-2 GB的可用内存,我会估计一两分钟的运行时间。

相关问题