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

相关文章

  • 带你认识Django

    带你认识Django

    今天小编就为大家分享一篇关于带你认识Django,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • pycharm的debug调试以及异常,Python中错误的处理过程

    pycharm的debug调试以及异常,Python中错误的处理过程

    这篇文章主要介绍了pycharm的debug调试以及异常,Python中错误的处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Python实现识别手写数字 Python图片读入与处理

    Python实现识别手写数字 Python图片读入与处理

    这篇文章主要为大家详细介绍了Python实现识别手写数字,Python图片的读入与处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python实现轻松读取大文件的技巧揭秘

    Python实现轻松读取大文件的技巧揭秘

    Python提供了多种方法来读取文件内容,其中包括read()、readline()和readlines()三个常用的函数,本文将深入探讨这三个函数的使用方法,需要的可以参考一下
    2023-08-08
  • django认证系统实现自定义权限管理的方法

    django认证系统实现自定义权限管理的方法

    这篇文章主要介绍了django认证系统实现自定义权限管理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python计算任意多边形间的重叠面积的示例代码

    Python计算任意多边形间的重叠面积的示例代码

    最近有个作业,给定的数据为多边形的各个顶点,为N*2的矩阵,N 为多边形的顶点个数,计算任意两个多边形重叠面积计算,本文就来详细的介绍一下
    2021-08-08
  • 详解Python的Django框架中的模版相关知识

    详解Python的Django框架中的模版相关知识

    这篇文章主要介绍了Python的Django框架中的模版相关知识,模版的存在大大简化了创作页面时HTML的相关工作,需要的朋友可以参考下
    2015-07-07
  • Python列表的定义及使用

    Python列表的定义及使用

    这篇文章主要介绍了Python列表的定义及使用,在Python中,列表是由一系列元素按照特定的顺序构成的数据结构,也就是说列表类型的变量可以存储多个数据,且可以重复,下面一起进入文章学习学习内容,需要的朋友可以参考一下
    2021-11-11
  • Django网络框架之创建虚拟开发环境操作示例

    Django网络框架之创建虚拟开发环境操作示例

    这篇文章主要介绍了Django网络框架之创建虚拟开发环境操作,简单描述了虚拟开发环境的概念、功能,并分析了使用venv与virtualenv安装虚拟环境相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • python自制简易mysql连接池的实现示例

    python自制简易mysql连接池的实现示例

    本文主要介绍了python自制简易mysql连接池的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论