下午好,
我是python编程的新手,我正在尝试为一个学校项目编写一个非常基本的md5暴力破解密码程序。
我应该写一个脚本,它将破解一系列MD5散列密码。密码必须从名为“hashes.txt”的文本文件中读入,每行一个密码。然后,脚本应该开始生成密码,从单个字符开始,然后是两个字符,依此类推
我对如何制作暴力破解器的思考过程是这样的:
import hashlib
import itertools
abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@0123456789"
abc_list = list(abc)
def combo():
md5_hash = ""
file_name = open("hashes.txt", "r")
for password in file_name:
password = password.strip()
#print(password)
for r in range(len(abc_list)):
combinations_object = itertools.combinations(abc_list, r)
combinations_list = list(combinations_object)
#print(combinations_list)
for lis in combinations_list:
glue = "".join(lis)
hash_object = hashlib.md5(glue.encode())
md5_hash = hash_object.hexdigest()
print(glue)
#print(md5_hash)
#print(glue + " " + md5_hash)
if md5_hash == password :
print("Your password is: " + "'" + glue +"' "+ md5_hash)
break我要破解的密码是: Z,AD,上帝,1234,AbCdE,特洛伊木马
每次我运行脚本时,它只输出密码:z,然后运行其余部分,而不执行'if‘语句。
我试过在'if‘下面使用'break’语句,但结果是一样的。
发布于 2021-11-25 23:33:09
创建并存储一次组合列表(或者更确切地说,是生成器)可能会使您受益。
https://stackoverflow.com/a/31474532/11170573
import itertools
def all_combinations(any_list):
return itertools.chain.from_iterable(
itertools.combinations(any_list, i + 1)
for i in range(len(any_list)))您可以按如下方式更改代码:
import hashlib
import itertools
abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@0123456789"
abc_list = list(abc)
combinations_object = all_combinations(abc_list)
def combo():
file_name = open("hashes.txt", "r")
for password in file_name:
password = password.strip()
for comb in combinations_object:
glue = "".join(comb)
hash_object = hashlib.md5(glue.encode())
md5_hash = hash_object.hexdigest()
if md5_hash == password :
print("Your password is: " + "'" + glue +"' "+ md5_hash)
break发布于 2021-11-25 23:23:16
当你使用break的时候,你所说的就是打破循环,我现在在中。
请注意,您的条件由三个for循环包装,因此它只会break内部循环,并继续执行其余循环。
你能做的就是Jason Baker在https://stackoverflow.com/a/438869/16627440中的建议。
将该break更改为return md5_hash,并在打印中调用该函数。
if md5_hash == password :
return md5_hash# Outside your function
print("Your password is: " + "'" + glue +"' "+ combo())https://stackoverflow.com/questions/70118146
复制相似问题