python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python hashlib 模块

Python3 hashlib 模块基本用法详解

作者:小陶coding

在Python3中,hashlib模块提供了一系列加密哈希算法的实现,用于计算数据的哈希值,本文给大家介绍Python3 hashlib模块基本用法,感兴趣的朋友跟随小编一起看看吧

在 Python3 中,hashlib模块提供了一系列加密哈希算法的实现,用于计算数据的哈希值。哈希算法(又称散列算法)通过将任意长度的输入数据转换为固定长度的输出(哈希值),具有单向性(无法从哈希值反推原始数据)和唯一性(不同数据大概率产生不同哈希值)的特点,常用于数据校验、密码存储、数字签名等场景。

一、基本用法

hashlib的核心流程是:创建哈希对象 → 更新数据 → 获取哈希值。

关键说明:

二、常用哈希算法及示例

hashlib支持多种主流算法,如md5sha1sha256sha512等(安全性:sha512 > sha256 > sha1 > md5)。

1. 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

2. SHA-256

import hashlib
# 直接传入bytes数据(b前缀表示bytes)
sha256_hash = hashlib.sha256(b"hello world")
# 获取哈希值
print(sha256_hash.hexdigest())  # 输出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e44b0

3. 分块更新数据(适合大文件)

对于大文件或流式数据,可分多次调用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 环境都保证支持的算法列表

四、注意事项

  1. 安全性MD5SHA1已被证明存在安全漏洞,不推荐用于密码存储、数字签名等安全场景,建议使用SHA-256SHA-512或更先进的SHA3系列。
  2. 数据类型:必须传入 bytes 类型数据,字符串需先编码(如str.encode("utf-8")),否则会报错。
  3. 哈希碰撞:理论上不同数据可能产生相同哈希值(碰撞),但好的算法(如 SHA-256)碰撞概率极低,可忽略。

五、扩展:带密钥的哈希(HMAC)

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 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文