Python:使用已知字符制作暴力哈希检查器

Python:使用已知字符制作暴力哈希检查器,python,hash,brute-force,Python,Hash,Brute Force,我创建了一个相当简单的程序来强制执行指定类型的散列,并能够将已知字符附加到它的开头 import datetime import hashlib import itertools characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' def checkHashes(targetHash, unhashedStringLength, hashType, discovered): print("Start = " + str(datet

我创建了一个相当简单的程序来强制执行指定类型的散列,并能够将已知字符附加到它的开头

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种可能性:

AB234xxxANSx34
AB234xxxANSy34
AB234xxyANSx34
AB234xxyANSy34
AB234xyxANSx34
AB234xyxANSy34
AB234xyyANSx34
AB234xyyANSy34
AB234yxxANSx34
AB234yxxANSy34
AB234yxyANSx34
AB234yxyANSy34
AB234yyxANSx34
AB234yyxANSy34
AB234yyyANSx34
AB234yyyANSy34
product()
而言,类似于
[“AB234”]
的内容是一个包含单个元素的序列,因此它返回的每个产品中都包含单个元素

至于效率,任务本身就是指数时间。没有什么能让它更快。工业级的破解者求助于汇编程序以获得低水平的速度,并将任务分散到尽可能多的CPU上,只要他们能够运行;-)

AB234xxxANSx34
AB234xxxANSy34
AB234xxyANSx34
AB234xxyANSy34
AB234xyxANSx34
AB234xyxANSy34
AB234xyyANSx34
AB234xyyANSy34
AB234yxxANSx34
AB234yxxANSy34
AB234yxyANSx34
AB234yxyANSy34
AB234yyxANSx34
AB234yyxANSy34
AB234yyyANSx34
AB234yyyANSy34