MD5哈希结果不符合预期,如何获取标准十六进制哈希值?
解决MD5哈希输出为字节串而非十六进制字符串的问题
我看了你的代码,核心问题出在hashlib的方法调用上——你现在用的digest()方法返回的是原始二进制字节串(就是你看到的b'\x0by\x07\xb4\xe8\xd9\x90d\xaa\xd9\xe6\x1d\xfa\x92\xc2\xaf'这种格式),而你需要的十六进制哈希值,得用hexdigest()方法来获取。
关键区别说明
digest():返回二进制格式的哈希值(字节串类型),适合需要紧凑二进制数据的场景hexdigest():返回十六进制编码的字符串,也就是你预期的63eb1dea1692fc53800b20be983e9a8b这种可读格式
修改后的代码
直接调整computeMD5hash函数里的方法,同时优化一些细节(比如跳出双层循环、规范文件操作):
import hashlib def computeMD5hash(string): m = hashlib.md5() m.update(string.encode('utf-8')) # 将digest()替换为hexdigest(),返回十六进制字符串 md5string = m.hexdigest() return md5string # 用with语句打开文件,自动处理资源释放 with open('wordlist.txt', 'r') as wordlist: words = [x.strip('\n') for x in wordlist.readlines()] print("Searching...") for i in words: for x in words: combined_word = i + x print(combined_word) out_hash = computeMD5hash(combined_word) print(out_hash) # 现在out_hash是字符串,和目标哈希直接比较即可 if out_hash == '63eb1dea1692fc53800b20be983e9a8b': print(f"Found match: {combined_word}") # 找到匹配后直接退出程序,避免无效循环 exit()
额外优化提示
- 原代码里的
break只能跳出内层循环,外层循环还会继续执行,用exit()或者设置标志位可以直接终止整个程序,提升效率 - 使用
with语句管理文件是Python的最佳实践,能避免忘记关闭文件导致的资源泄漏问题
内容的提问来源于stack exchange,提问作者Beckett O'Brien
相关产品推荐
相关产品推荐

