跳转至

Python hashlib

概念与用途

hashlib 提供 SHA-2、SHA-3、BLAKE2 等密码学摘要,用于完整性校验、内容寻址和签名流程的预处理。摘要不可替代加密,也不能单独安全存储用户密码。

核心 API

通过 hashlib.sha256(data) 一次计算,或创建对象后多次 update() 流式处理。hexdigest() 返回十六进制文本;比较认证标签使用 hmac.compare_digest()。

import hashlib

hasher = hashlib.sha256()
for chunk in (b"large ", b"file ", b"content"):
    hasher.update(chunk)
print(hasher.hexdigest())

算法与 API

API 场景 注意
sha256() 通用完整性摘要 不能隐藏内容
blake2b() 快速、可加 key 摘要 配置摘要长度
file_digest() 文件流摘要 Python 3.11+
pbkdf2_hmac() 兼容型密码派生 参数需按策略更新

示例:分块校验文件式数据

import hashlib
from io import BytesIO

stream = BytesIO(b"a" * 10_000)
digest = hashlib.sha256()
while chunk := stream.read(4096):
    digest.update(chunk)
print(digest.hexdigest())

hashlib 是标准库,无需安装。读取真实文件应使用 with 关闭句柄;比较安全标签用 hmac.compare_digest(),避免普通字符串比较暴露时序差异。

常见错误与安全注意

  • 用户密码应使用 Argon2、scrypt、bcrypt 或 PBKDF2 加盐慢哈希。
  • MD5、SHA-1 不适合抗碰撞安全用途,但可在非对抗兼容场景校验旧协议。
  • 校验下载文件还需从可信渠道获得期望摘要,否则攻击者可同时替换两者。