侧边栏壁纸
博主头像
Brooks' Forest 博主等级

空山闻悲雁,净水映幽兰。 扑蝶乡童子,未觉秋叶残。

  • 累计撰写 35 篇文章
  • 累计创建 17 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

MD5 摘要算法详解

Ivy Forest
2025-05-12 / 0 评论 / 0 点赞 / 5 阅读 / 0 字 / 正在检测是否收录...

1. MD5 是什么?

MD5(Message-Digest Algorithm 5)是一种哈希算法,它把任意长度的数据(如字符串、文件)转换成固定长度的 128 位(16 字节)哈希值,通常用 32 位十六进制字符串 表示。

示例

import hashlib
md5_hash = hashlib.md5(b"hello").hexdigest()
print(md5_hash)  # 输出:5d41402abc4b2a76b9719d911017c592

2. MD5 的特点

  • 固定长度输出:不管输入多大,MD5 始终输出 32 个字符的十六进制字符串。
  • 不可逆:无法从 MD5 哈希值反推出原始数据(不是加密,是摘要)。
  • 雪崩效应:输入稍有变化,MD5 值完全不同。
    hashlib.md5(b"hello").hexdigest()   # 5d41402abc4b2a76b9719d911017c592
    hashlib.md5(b"hello1").hexdigest()  # 6f9b9af3cd6e8b8a73c2cdced37fe9f8
    
  • 不唯一:不同数据可能生成相同 MD5(碰撞),但概率极低。

3. MD5 的常见用途

  1. 文件完整性校验

    • 检查下载的文件是否被篡改(对比 MD5 值)。
    • 示例(Linux):
      md5sum filename.txt
      
  2. 缓存 Key 生成

    • 用 MD5 哈希值作为唯一标识(如 Redis 缓存 Key)。
  3. 旧系统密码存储(已不安全)

    • 早期系统存储密码的 MD5 值(现在不推荐!)。

4. MD5 的安全问题

  • 碰撞攻击:可以人为制造不同数据生成相同 MD5(已被破解)。
  • 彩虹表攻击:黑客预先计算常见数据的 MD5,反向查原始数据。

安全替代方案

  • 密码存储bcryptPBKDF2Argon2(加盐+慢哈希)。
  • 数据校验SHA-256SHA-3

5. 代码示例(Python)

import hashlib

# 计算字符串 MD5
text = "hello"
md5_hash = hashlib.md5(text.encode()).hexdigest()
print(f"MD5: {md5_hash}")

# 计算文件 MD5
def get_file_md5(filename):
    with open(filename, "rb") as f:
        return hashlib.md5(f.read()).hexdigest()
print(get_file_md5("data.txt"))

6. 总结

  • 能用 MD5 的场景:非安全用途(如缓存 Key、文件校验)。
  • 不能用 MD5 的场景:密码存储、数字签名。
  • 替代方案SHA-256(安全)、bcrypt(密码存储)。

一句话:MD5 适合快速计算哈希,但不安全,关键场景换 SHA-256!

0

评论区