You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:44