我正在尝试编写一个程序,以不同的组合逐个生成字符串(从“a”开始到“zzzzzz *”结束)并将字符串转换为哈希值,然后检查哈希值以与另一个哈希值进行比较。我目前正在使用itertools
来完成任务,但它似乎会生成一个相当大的字符串列表,并在处理之前将它们全部存储在内存中。
在命令行中运行以下代码约5分钟时,命令行本身占用超过4GB的内存,我相信可以大大减少。
我想要做的是1)一次生成一个字符串而不是数组,2)以这样的方式管理内存,因为在我使用该字符串后,它会从内存中移除,或者手动删除或通过垃圾收集器。我怎么能做到这一点?
#!/bin/env/python
import itertools
import string
import hashlib
def stringGen(charset, maxlength):
return (''.join(candidate)
for candidate in itertools.chain.from_iterable(itertools.product(charset, repeat=i)
for i in range(1, maxlength + 1)))
i=0
for attempt in stringGen(string.ascii_lowercase, 10):
i+=1
aHash = hashlib.sha256(attempt).hexdigest()
print attempt
print aHash + " " + str(i) + "\n"
if aHash == hashlib.sha256("longword").hexdigest():
print "matched"
break