文章目录
- 使用场景
- 主要函数
- - 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)。