Python:使用已知字符生成暴力哈希检查器

2024-09-30 16:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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”,其中“*”是未知字符,我就不能告诉程序我知道的字符超过前五个。有没有什么方法可以在不减慢进程的情况下,对一系列已知和未知的字符进行暴力破解?另外,如果有什么我可以做的,使程序更有效地运行,我非常乐意接受建议。在

抱歉,如果我的措辞有点混乱。如果你有什么需要澄清的,请问!在


Tags: import程序datetime字符nowhashlibprintitertools
1条回答
网友
1楼 · 发布于 2024-09-30 16:28:22

您可以在product()的参数中穿插固定部分和可变部分。例如,使用您的"AB234***ANS*34"示例,但是使用一个更小的字符集使输出变短(4个通配符中每个可能有2个字符=2**4=16):

from itertools import product
characters = "xy"
template = [["AB234"],
            characters, characters, characters,
            ["ANS"],
            characters,
            ["34"]]
for trialString in product(*template):
    s = "".join(trialString)
    print(s)

显示16种可能性:

^{pr2}$

product()而言,类似["AB234"]是一个具有单个元素的序列,因此单个元素包含在它返回的每个产品中。在

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

相关问题 更多 >