当前位置: 首页 > article >正文

Python 标准库:hashlib——安全哈希与消息摘要

文章目录

  • 使用场景
  • 主要函数
    • - new(name)
    • - md5()
    • - sha1()
    • - sha224()
    • - sha256()
    • - sha384()
    • - sha512()
  • 注意事项
  • 总结


# 模块介绍 hashlib 是 Python 标准库中的一个模块,提供了多种常见的哈希算法(如 SHA-1, SHA-256, MD5 等),用于生成消息摘要或数据指纹。消息摘要常用于数据完整性校验、数字签名、哈希表等应用场景。

使用场景

  • 数据完整性验证:可以通过生成原始数据的哈希值来验证数据在传输或存储过程中是否被篡改。
  • 数字签名:在数字签名和加密协议中,哈希值用于确认消息的完整性。
  • 哈希表:数据结构中的哈希表(如 Python 的字典)依赖于哈希函数来存储和查找数据。
  • 密码存储:使用哈希函数对密码进行加密存储,确保密码安全。

主要函数

名称描述
new(name)创建一个新的哈希对象,支持算法名称(如 “md5”、“sha256”)
md5()返回一个 MD5 哈希对象
sha1()返回一个 SHA-1 哈希对象
sha224()返回一个 SHA-224 哈希对象
sha256()返回一个 SHA-256 哈希对象
sha384()返回一个 SHA-384 哈希对象
sha512()返回一个 SHA-512 哈希对象

- new(name)

new() 函数根据哈希算法的名称创建一个新的哈希对象。这个函数适用于所有支持的哈希算法,传入算法名称字符串(如 “md5”, “sha256”, “sha512” 等)。

import hashlib

# 使用 new 创建一个 SHA-256 哈希对象
hash_object = hashlib.new('sha256')

# 更新哈希对象,传入数据
hash_object.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(hash_object.hexdigest())  # 输出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

- md5()

md5() 函数用于创建一个 MD5 哈希对象,输出 128 位哈希值。

import hashlib

# 创建一个 MD5 哈希对象
md5_hash = hashlib.md5()

# 更新哈希对象,传入数据
md5_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(md5_hash.hexdigest())  # 输出:5eb63bbbe01eeed093cb22bb8f5acdc3

- sha1()

sha1() 函数用于创建一个 SHA-1 哈希对象,输出 160 位哈希值。

import hashlib

# 创建一个 SHA-1 哈希对象
sha1_hash = hashlib.sha1()

# 更新哈希对象,传入数据
sha1_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(sha1_hash.hexdigest())  # 输出:2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

- sha224()

sha224() 函数用于创建一个 SHA-224 哈希对象,输出 224 位哈希值。

import hashlib

# 创建一个 SHA-224 哈希对象
sha224_hash = hashlib.sha224()

# 更新哈希对象,传入数据
sha224_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(sha224_hash.hexdigest())  # 输出:2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b

- sha256()

sha256() 函数用于创建一个 SHA-256 哈希对象,输出 256 位哈希值。

import hashlib

# 创建一个 SHA-256 哈希对象
sha256_hash = hashlib.sha256()

# 更新哈希对象,传入数据
sha256_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(sha256_hash.hexdigest())  # 输出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

- sha384()

sha384() 函数用于创建一个 SHA-384 哈希对象,输出 384 位哈希值。

import hashlib

# 创建一个 SHA-384 哈希对象
sha384_hash = hashlib.sha384()

# 更新哈希对象,传入数据
sha384_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(sha384_hash.hexdigest())  # 输出:fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd

- sha512()

sha512() 函数用于创建一个 SHA-512 哈希对象,输出 512 位哈希值。

import hashlib

# 创建一个 SHA-512 哈希对象
sha512_hash = hashlib.sha512()

# 更新哈希对象,传入数据
sha512_hash.update(b'hello world')

# 获取最终的哈希值(16 进制字符串)
print(sha512_hash.hexdigest())  # 输出:309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f

注意事项

  • 不可逆性:哈希函数是不可逆的,意味着无法从哈希值恢复原始数据。
  • 碰撞问题:不同的数据可能产生相同的哈希值(碰撞)。尽管对于现代哈希算法,如 SHA-256,碰撞的概率极低,但对于 MD5 和 SHA-1 等算法,这种风险较高,因此不推荐在安全性要求较高的场景中使用 MD5 和 SHA-1。
  • 哈希算法的选择:应根据安全性要求选择合适的哈希算法。SHA-256 和 SHA-512 等算法适用于需要较强安全性的场合,而 MD5 和 SHA-1 在现代应用中一般不推荐使用。
  • 数据大小:哈希值的长度与输入数据的大小无关。无论输入数据多大,哈希值的长度都是固定的。

总结

hashlib 提供了多种常用的哈希算法(如 MD5、SHA-1、SHA-256 和 SHA-512),它们广泛应用于数据完整性验证、数字签名、密码存储等安全领域。通过哈希算法,我们可以生成固定长度的哈希值,该值代表输入数据的指纹。虽然哈希算法在许多场景中非常有用,但开发者需要根据实际安全需求选择合适的算法,避免使用已知存在安全漏洞的算法(如 MD5 和 SHA-1)。


http://www.kler.cn/a/469429.html

相关文章:

  • Qt 下位机串口模拟器
  • 我的nvim的init.lua配置
  • Excel | 空格分隔的行怎么导入excel?
  • 面试高阶问题:对称加密与非对称加密的原理及其应用场景
  • STM32 I2C通信外设
  • Linux安全防火墙(iptables)配置策略
  • ARM CCA机密计算安全模型之加密建议
  • 26 go语言(golang) - GC原理
  • 系统架构师考试-MDA模型驱动架构
  • Mac 版本向日葵退出登录账号
  • Electron快速入门——跨平台桌面端应用开发框架
  • 嵌入式linux中socket控制与实现
  • Mono里运行C#脚本24—handle_ctor_call
  • 【Unity3D】UGUI Canvas画布渲染流程
  • 【NLP高频面题 - Transformer篇】Transformer编码器有哪些子层?
  • 【蓝桥杯】43709.机器人繁殖
  • (初学者)STM32 MP157中LED触发器笔记
  • Go小技巧易错点100例(二十一)
  • BGP(Border Gateway Protocol)路由收集器
  • 下载word报表
  • reactor中的并发
  • Java(day3)
  • 使用JMeter对Linux生产服务器进行压力测试
  • Golang中的大端序和小端序
  • 五类推理(逻辑推理、概率推理、图推理、基于深度学习的推理)的开源库 (二)
  • 51单片机——蜂鸣器模块