所以我在这里生成随机十六进制值,对它们进行散列并与预先给定的散列进行比较。该程序测试大约4 000个哈希,然后停止运行而没有错误。
这是代码的循环部分:
def loop():
randomhex = binascii.b2a_hex(os.urandom(4))
hash_object = hashlib.sha1(randomhex)
hashh = hash_object.hexdigest()
print(hashh)
if hashh == sha:
done()
else:
loop()
答案 0 :(得分:0)
你不能像这样的循环使用递归
这是您的呼叫树的一个小视图:
loop()
loop()
loop()
loop()
loop()
loop()
...
依此类推,直到筹码耗尽......
while
循环足够时。我个人更喜欢带有手动while True
的{{1}}循环,这样可以节省在循环之前初始化变量的麻烦,如下所示:
break
作为旁注,同时使用bruteforce 和随机打开哈希是非常有效的方法......即使重复的可能性非常小def loop():
while True:
randomhex = binascii.b2a_hex(os.urandom(4))
hash_object = hashlib.sha1(randomhex)
hashh = hash_object.hexdigest()
print(hashh)
if hashh == sha:
# we found the result: exit the loop
break
从1到2 ** 31的简单循环计算起来会更快。