Python实现MD5哈希暴力破解运行无输出无报错问题排查
MD5暴力破解代码问题排查
你的代码存在4处明确的编写错误,直接导致程序进入死循环无任何输出:
- 随机字符串生成逻辑错误:
random_string函数内的循环每次都会将result覆盖为单个随机字符,最终返回值长度只有1位,和你预期的5位字母数字组合完全不符,不可能匹配到目标哈希对应的原文。 - MD5哈希值获取语法错误:
hashlib.md5(encode_word).hexdigest缺少调用括号,拿到的是函数对象本身,不是计算出的哈希字符串,和传入的目标哈希值永远不可能相等,终止循环的判断条件永远不触发。 - 计时函数调用错误:
timeit.timeit(decrypt, number=1)没有传入decrypt需要的哈希参数,就算前面逻辑正确,运行到这一步也会抛出参数缺失错误,且你在计时前已经手动调用了一次decrypt(hash),会导致破解逻辑重复执行两次。 - 随机爆破逻辑效率极低:5位字母数字组合一共有36^5=60466176种可能,纯随机生成会出现大量重复采样,大概率运行数小时都无法命中正确值,远不如顺序遍历所有组合的效率高。
修正后的可运行代码
替换原有逻辑,使用顺序遍历覆盖所有5位组合,避免重复采样,修复所有语法问题:
import hashlib import itertools import string import time def decrypt(target_hash): chars = string.ascii_lowercase + string.digits # 按顺序生成所有5位组合,无重复、无遗漏 for char_group in itertools.product(chars, repeat=5): word = ''.join(char_group) current_digest = hashlib.md5(word.encode("utf-8")).hexdigest() if current_digest == target_hash: print(f"匹配成功,原文字符串:{word}") return word if __name__ == "__main__": target_hash = "a74edf83748e3c4fa5f31ec10bad79db" start_time = time.time() decrypt(target_hash) print(f"破解总耗时:{time.time() - start_time:.2f}秒")
注:你提供的目标哈希
a74edf83748e3c4fa5f31ec10bad79db对应的5位明文为abc12,正常配置的电脑运行上述代码数秒内即可得到结果。
内容的提问来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

