hashlib

关注
义项:Python哈希库
hashlib

hashlib是Python标准库中提供安全哈希与消息摘要算法统一接口的模块,属于Python内置库,无需额外安装即可使用[1]。它封装了MD5、SHA-1、SHA-2系列、SHA-3系列与BLAKE2等多种算法,并提供pbkdf2_hmac、scrypt两种基于口令的密钥派生函数。该模块因可对任意长度数据生成固定长度摘要,被广泛用于文件完整性校验、数据指纹计算等场景[2]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

hashlib是Python标准库中的一个模块,为多种安全哈希与消息摘要算法提供统一的调用接口[1]。它所包含的算法有FIPS标准定义的安全哈希算法SHA1、SHA224、SHA256、SHA384、SHA512以及SHA-3系列,还包括较早的MD5算法[3]。在术语上,「安全哈希」与「消息摘要」含义相同,早期算法多称为消息摘要,现代通行叫法是安全哈希[4]。

该模块自诞生起就随Python解释器一同发布,开发者通过import hashlib即可调用,不必另行安装第三方组件[2]。

原理

哈希算法把任意长度的输入字节串映射为固定长度的摘要。hashlib为每类算法提供一个与其同名的构造器,例如用sha256()建立一个SHA-256哈希对象,再用update()方法投喂数据,最后通过digest()或hexdigest()取得截至目前所有输入串联后的摘要值[3]。多次调用update()与一次传入全部数据等价,即m.update(a)后接m.update(b)等同于m.update(a+b)[5]。digest()返回原始字节,hexdigest()返回双倍长度、仅含十六进制字符的字符串[4]。

update()只接受类字节对象,不支持直接传入字符串,因为哈希运算针对字节而非字符,字符串需先行编码[4]。为提高多线程场景下的效率,当单次传入的数据超过2047字节时,CPython会释放全局解释器锁,使其他线程得以运行[5]。哈希对象还有copy()方法,可用于对共享同一前缀的多段数据分别计算摘要。


flowchart LR

A[输入字节串] --> B[update 投喂数据]

B --> C[哈希对象内部状态]

C --> D[digest 原始字节]

C --> E[hexdigest 十六进制字符串]

发展历程

hashlib于Python 2.5版本引入,其模块作者为Gregory P. Smith,目的是用统一接口取代当时彼此分离的md5模块与sha模块。在随后的版本中,模块不断扩充算法支持:SHA-3与SHAKE在CPython链接的OpenSSL提供相应实现时被启用[3]。

Python 3.2新增了algorithms_guaranteed与algorithms_available两个常量集合,前者列出所有平台都保证支持的算法名,后者列出当前解释器实际可用的算法名[5]。Python 3.6加入scrypt函数[2]。Python 3.9起,所有hashlib构造器都接受仅限关键字的参数usedforsecurity,默认值为True,置为False时可在受限环境中使用被标记为不安全或被禁用的算法[3]。自Python 3.12起,对于所链接的OpenSSL未提供的MD5、SHA1、SHA2或SHA3算法,模块回退使用HACL*项目中经过验证的实现[3]。

应用

最常见的用途是计算数据的哈希指纹,以校验完整性。由于相同输入必得相同摘要,而任一比特的改变都会使输出完全不同,比对摘要即可判断文件或数据是否被改动[6]。处理大文件时可以分块读取并反复调用update(),避免一次性把整个文件载入内存[7]。

在口令存储方面,模块提供pbkdf2_hmac与scrypt两种密钥派生函数,通过加盐和大量迭代来增加暴力破解成本[1]。BLAKE2系列的blake2b与blake2s支持密钥模式,可用作HMAC更快速、更简单的替代,网络应用可借此对下发给用户的Cookie做对称签名并在之后验证是否被篡改[2]。

局限

部分算法存在已知的碰撞弱点。MD5与SHA-1都已被证明可以构造出摘要相同的不同消息,因此不宜再用于安全场景[3]。SHA-1的实际碰撞在2017年被公开演示[6]。

可用算法并非完全由Python自身决定,而是取决于解释器所链接的OpenSSL库,部分算法只能在某些平台上通过new()按名称访问[1]。模块也不涵盖全部常见校验算法,若需要adler32或crc32,应改用zlib模块[3]。此外,pbkdf2_hmac与scrypt在Python仅用OpenSSL编译时方可使用,其中scrypt早先的纯Python实现已被移除[2]。在32位平台上,SHA-384与SHA-512的运算速度较慢。

参见

  • Python —— hashlib是其标准库中负责哈希运算的模块。

  • SHA-2 —— hashlib通过sha224、sha256、sha384、sha512等构造器提供该系列算法。

  • MD5 —— hashlib内置的早期消息摘要算法,现已存在碰撞弱点。

  • BLAKE2 —— hashlib通过blake2b与blake2s提供该算法,支持密钥模式。

  • HMAC —— 基于哈希的消息认证码,可与hashlib配合使用。

  • OpenSSL —— hashlib实际可用的算法种类取决于解释器所链接的该库版本。

参考资料

  1. hashlib — Secure hashes and message digests [引用日期2026-10-14]
  2. hashlib — Secure hashes and message digests [引用日期2026-10-14]
  3. hashlib --- 安全雜湊與訊息摘要¶ [引用日期2026-10-14]
  4. hashlib [引用日期2026-10-14]
  5. hashlib [引用日期2026-10-14]
  6. Hashlib-Module [引用日期2026-10-14]
  7. Python 中的 hashlib 模块 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:4 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:38:13Z

历史版本

本条目引用的词条
Python HMAC SHA-2 MD5 BLAKE2 OpenSSL