文章目录
- import hashlib # 1. 创建MD5哈希对象 md5_hash = hashlib.md5() # 2. 更新数据(需传入bytes类型) data = “hello world” md5_hash.update(data.encode(“utf-8”)) # 字符串编码为bytes # 3. 获取哈希值(十六进制字符串) print(md5_hash.hexdigest()) # 输出:5eb63bbbe01eeed093cb22bb8f5acdc3
- import hashlib # 直接传入bytes数据(b前缀表示bytes) sha256_hash = hashlib.sha256(b”hello world”) # 获取哈希值 print(sha256_hash.hexdigest()) # 输出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e44b0
- 对于大文件或流式数据,可分多次调用update()累积数据,避免一次性加载到内存: import hashlib def calculate_file_hash(file_path, algorithm=”sha256″): # 创建指定算法的哈希对象(通过hashlib.new()支持动态指定算法) hash_obj = hashlib.new(algorithm) # 分块读取文件并更新哈希 with open(file_path, “rb”) as f: while chunk := f.read(4096): # 每次读取4096字节(可调整) hash_obj.update(chunk) return hash_obj.hexdigest() # 示例:计算某文件的SHA-256哈希 print(calculate_file_hash(“large_file.zip”)) # 输出文件的哈希值
目录
- 一、基本用法
- 关键说明:
- 二、常用哈希算法及示例
- 1. MD5
- 2. SHA-256
- 3. 分块更新数据(适合大文件)
- 三、重要属性与方法
- 四、注意事项
- 五、扩展:带密钥的哈希(HMAC)
在 Python3 中,hashlib模块提供了一系列加密哈希算法的实现,用于计算数据的哈希值。哈希算法(又称散列算法)通过将任意长度的输入数据转换为固定长度的输出(哈希值),具有单向性(无法从哈希值反推原始数据)和唯一性(不同数据大概率产生不同哈希值)的特点,常用于数据校验、密码存储、数字签名等场景。
hashlib的核心流程是:创建哈希对象 → 更新数据 → 获取哈希值。
- 哈希算法处理的是字节数据(bytes),因此字符串需先通过
encode()编码为 bytes(如utf-8)。
- 可通过
update()多次传入数据,最终计算的是所有数据的总哈希值(适合分块处理大数据)。
- 哈希值可通过
digest()(返回 bytes 类型)或hexdigest()(返回十六进制字符串,更易读)获取。
encode()编码为 bytes(如utf-8)。update()多次传入数据,最终计算的是所有数据的总哈希值(适合分块处理大数据)。digest()(返回 bytes 类型)或hexdigest()(返回十六进制字符串,更易读)获取。
hashlib支持多种主流算法,如md5、sha1、sha256、sha512等(安全性:sha512 > sha256 > sha1 > md5)。
import hashlib
# 1. 创建MD5哈希对象
md5_hash = hashlib.md5()
# 2. 更新数据(需传入bytes类型)
data = "hello world"
md5_hash.update(data.encode("utf-8")) # 字符串编码为bytes
# 3. 获取哈希值(十六进制字符串)
print(md5_hash.hexdigest()) # 输出:5eb63bbbe01eeed093cb22bb8f5acdc3
import hashlib
# 直接传入bytes数据(b前缀表示bytes)
sha256_hash = hashlib.sha256(b"hello world")
# 获取哈希值
print(sha256_hash.hexdigest()) # 输出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e44b0
对于大文件或流式数据,可分多次调用update()累积数据,避免一次性加载到内存:
import hashlib
def calculate_file_hash(file_path, algorithm="sha256"):
# 创建指定算法的哈希对象(通过hashlib.new()支持动态指定算法)
hash_obj = hashlib.new(algorithm)
# 分块读取文件并更新哈希
with open(file_path, "rb") as f:
while chunk := f.read(4096): # 每次读取4096字节(可调整)
hash_obj.update(chunk)
return hash_obj.hexdigest()
# 示例:计算某文件的SHA-256哈希
print(calculate_file_hash("large_file.zip")) # 输出文件的哈希值
| 方法 / 属性 | 说明 |
|---|---|
hashlib.new(algorithm) |
创建指定算法的哈希对象(如new("sha3_256")) |
update(data) |
向哈希对象传入数据(data 必须为 bytes) |
digest() |
返回 bytes 类型的哈希值 |
hexdigest() |
返回十六进制字符串类型的哈希值 |
digest_size |
哈希值的字节长度(如 SHA-256 为 32 字节) |
block_size |
算法的块大小(用于内部计算) |
algorithms_available |
系统支持的所有哈希算法列表 |
algorithms_guaranteed |
所有 Python 环境都保证支持的算法列表 |
- 安全性:
MD5和SHA1已被证明存在安全漏洞,不推荐用于密码存储、数字签名等安全场景,建议使用SHA-256、SHA-512或更先进的SHA3系列。
- 数据类型:必须传入 bytes 类型数据,字符串需先编码(如
str.encode("utf-8")),否则会报错。
- 哈希碰撞:理论上不同数据可能产生相同哈希值(碰撞),但好的算法(如 SHA-256)碰撞概率极低,可忽略。
MD5和SHA1已被证明存在安全漏洞,不推荐用于密码存储、数字签名等安全场景,建议使用SHA-256、SHA-512或更先进的SHA3系列。str.encode("utf-8")),否则会报错。
hashlib常与hmac模块配合使用,实现带密钥的哈希(HMAC),用于身份验证等场景(如 API 签名):
import hmac import hashlib key = b"my_secret_key" # 密钥(bytes类型) data = b"hello world" # 待加密数据 # 计算HMAC-SHA256 hmac_obj = hmac.new(key, data, digestmod=hashlib.sha256) print(hmac_obj.hexdigest()) # 输出带密钥的哈希值
通过hashlib,可以便捷地实现数据哈希计算,满足数据校验、安全存储等需求。实际使用时需根据场景选择合适的算法,并注意数据类型和安全性要求。
到此这篇关于Python3 hashlib 模块的文章就介绍到这了,更多相关Python hashlib 模块内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python中的hashlib模块解析
- Python中hashlib模块的摘要算法详解
- Python常用内建模块hashlib、hmac详解
- Python算法模块之hashlib模块详解
- Python加密与解密模块hashlib与hmac
- Python hashlib模块详情
- Python基础之hashlib模块详解
- 盘点Python加密解密模块hashlib的7种加密算法(推荐)
- Python hashlib和hmac模块使用方法解析