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。
此函数将执行您的要求,但这里有一些事情需要考虑。
首先,正如 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