Python3 hashlib 模块基本用法详解

 更新时间:2025年10月23日 09:17:12   作者:小陶coding  
在Python3中,hashlib模块提供了一系列加密哈希算法的实现,用于计算数据的哈希值,本文给大家介绍Python3 hashlib模块基本用法,感兴趣的朋友跟随小编一起看看吧

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

一、基本用法

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

关键说明:

  • 哈希算法处理的是字节数据(bytes),因此字符串需先通过encode()编码为 bytes(如utf-8)。
  • 可通过update()多次传入数据,最终计算的是所有数据的总哈希值(适合分块处理大数据)。
  • 哈希值可通过digest()(返回 bytes 类型)或hexdigest()(返回十六进制字符串,更易读)获取。

二、常用哈希算法及示例

hashlib支持多种主流算法,如md5、sha1、sha256、sha512等(安全性: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. 安全性:MD5和SHA1已被证明存在安全漏洞,不推荐用于密码存储、数字签名等安全场景,建议使用SHA-256、SHA-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 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Python创建LNK文件选择器并导出配置文件

    使用Python创建LNK文件选择器并导出配置文件

    在这篇博客中,我将介绍如何使用Python的wxPython库开发一个GUI应用程序,该应用程序可以选择文件夹中的.lnk(快捷方式)文件,并将选中的文件导出为特定格式的buttons.ini配置文件,需要的朋友可以参考下
    2025-01-01
  • 纯Python代码从零构建一个AI多智能体系统

    纯Python代码从零构建一个AI多智能体系统

    单个 AI 能做的事有限,三个 AI 分工协作能做的事远超你想象,本文介绍了如何使用Python实现一个多智能体系统,文中还提供了系统架构设计、代码实现和执行流程详解,希望对大家有所帮助
    2026-04-04
  • python实现TCPclient的使用示例

    python实现TCPclient的使用示例

    python实现TCPclient是一件简单的事情,只要通过socket这个模块就可以实现,本文主要介绍了python实现TCPclient的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 基于python实现自动化文件移动工具

    基于python实现自动化文件移动工具

    在现代办公和数据处理环境中,文件的频繁迁移和整理是一项常见且耗时的任务,本文将详细介绍一个基于Python的自动化文件迁移工具,可以实时监控指定文件夹,需要的可以了解下
    2025-07-07
  • Python数据分析之NumPy常用函数使用详解

    Python数据分析之NumPy常用函数使用详解

    本篇将介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数、学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数,需要的可以参考一下
    2022-05-05
  • Pycharm如何对python文件进行打包

    Pycharm如何对python文件进行打包

    这篇文章主要介绍了Pycharm如何对python文件进行打包,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python使用wxpy轻松实现微信防撤回的方法

    python使用wxpy轻松实现微信防撤回的方法

    今天小编就为大家分享一篇python使用wxpy轻松实现微信防撤回的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python面向对象原理与基础语法详解

    Python面向对象原理与基础语法详解

    这篇文章主要介绍了Pyhton面向对象原理与基础语法,结合实例形式分析了Python面向对象程序设计中的基本原理、概念、语法与相关使用技巧,需要的朋友可以参考下
    2020-01-01
  • pandas实现datetime64与unix时间戳互转

    pandas实现datetime64与unix时间戳互转

    这篇文章主要介绍了pandas实现datetime64与unix时间戳互转,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python多线程编程简单介绍

    Python多线程编程简单介绍

    这篇文章主要介绍了Python多线程编程简单介绍,本文讲解了创建线程、Thread对象函数、常用示例等内容,需要的朋友可以参考下
    2015-04-04

最新评论