我创建了一个相当简单的程序来强制指定类型的散列,并能够将已知字符附加到它的开头。在
import datetime
import hashlib
import itertools
characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
def checkHashes(targetHash, unhashedStringLength, hashType, discovered):
print("Start = " + str(datetime.datetime.now()))
typeOfHash = getattr(hashlib, hashType)
for trialString in itertools.product(characters, repeat=unhashedStringLength-len(discovered)):
s = discovered + "".join(trialString)
if(typeOfHash(s.encode('utf-8')).hexdigest() == targetHash):
print("Finish = " + str(datetime.datetime.now()))
return s
也就是说,我目前无法解决一个包含已知字符的散列。例如,如果我有一个“AB234***ANS*34”,其中“*”是未知字符,我就不能告诉程序我知道的字符超过前五个。有没有什么方法可以在不减慢进程的情况下,对一系列已知和未知的字符进行暴力破解?另外,如果有什么我可以做的,使程序更有效地运行,我非常乐意接受建议。在
抱歉,如果我的措辞有点混乱。如果你有什么需要澄清的,请问!在
您可以在
product()
的参数中穿插固定部分和可变部分。例如,使用您的"AB234***ANS*34"
示例,但是使用一个更小的字符集使输出变短(4个通配符中每个可能有2个字符=2**4=16):显示16种可能性:
^{pr2}$就
product()
而言,类似["AB234"]
是一个具有单个元素的序列,因此单个元素包含在它返回的每个产品中。在至于效率,任务本身就是指数时间。没有什么能让它更快。工业强悍的破坏者求助于汇编程序以获得低水平的速度,并将任务分散到尽可能多的CPU上,使其能够运行;—)
相关问题 更多 >
编程相关推荐