SHA-1 哈希暴力破解

问题描述 投票:0回答:1
import hashlib

# Prompt the user to enter the target SHA-1 hash
target_hash = input("Enter the target SHA-1 hash: ")

# Path to the dictionary file
dictionary_file = r'C:\Users\johnny\Documents\Security\src\wordlist.txt'

def dictionary_attack(target_hash, dictionary_file):
    with open(dictionary_file, 'r') as file:
        for line in file:
            word = line.strip()  
           
            word_hash = hashlib.sha1(word.encode()).hexdigest()
            
            if word_hash == target_hash:
                print(f"Found the original string: {word}")
                return word
    print("Could not find the original string in the dictionary.")
    return None

   
original_input = dictionary_attack(target_hash, dictionary_file)

所以我想从哈希函数中找到原始单词 我现在可以通过暴力来逆转它 但问题是当单词是大写字符时,例如“JoeJoe”或“j0ej0e”,它在列表中找不到 但在列表中有“joejoe”如何将其转换为大写或者有办法做到这一点 抱歉我刚刚开始学习Python。

python hash sha1
1个回答
0
投票

此函数将执行您的要求,但这里有一些事情需要考虑。

首先,正如 ipodtouch 正确提到的,排列的数量是指数级的。 您的 6 个字母的单词会产生 2**6 或 64 个结果。 如果你的字典不简单,这将花费太长的时间。

第二,这个比较先进。 我使用“range”创建 0 到 63 之间的整数,然后使用二进制值来决定字母是小写还是大写。 例如,9 是 001001,所以我将第 3 个和第 6 个字母大写。

在此版本中,我使用列表来收集结果。 在我的第一个版本中,我使用了“yield”,但这更高级。

def permutecase(word):
    answers = []
    word = word.lower()
    for i in range(2**(len(word))):
        t = ""
        for j,c in enumerate(word):
            if 1<<j & i:
                t += c.upper()
            else:
                t += c
        answers.append(t)
    return answers

for s in permutecase('JoeJoe'):
    print(s)

输出:

joejoe
Joejoe
jOejoe
JOejoe
...
joEJOE
JoEJOE
jOEJOE
JOEJOE
© www.soinside.com 2019 - 2024. All rights reserved.