22、hashlib模块

本文详细介绍了Python的hashlib库如何实现常见的哈希算法,如MD5、SHA1、SHA256等,展示了如何处理大数据和使用哈希加盐保护密码。同时强调了MD5和SHA1的安全隐患,推荐使用SHA256或更安全的函数,如pbkdf2_hmac。
摘要由CSDN通过智能技术生成

目录

常见的哈希算法

基本用法

哈希大数据

使用哈希加盐保护密码

注意事项


hashlib 是 Python 内置的一个库,它提供了一个通用的接口来创建不同哈希消息摘要算法的加密散列。哈希函数可以用于许多目的,如数据完整性校验、保护密码和加密。

常见的哈希算法

hashlib 支持多种哈希算法,包括但不限于:

  • MD5 (hashlib.md5())
  • SHA1 (hashlib.sha1())
  • SHA256 (hashlib.sha256())
  • SHA512 (hashlib.sha512())

基本用法

要使用 hashlib 创建散列,可以:

import hashlib

# 创建一个新的散列对象,使用想要的哈希算法,这里以 MD5 为例
hash_object = hashlib.md5()

# 更新哈希对象,可以多次调用 update() 方法
hash_object.update(b'Hello, world!')

# 获取十六进制格式的完整散列
hash_hex = hash_object.hexdigest()

print(hash_hex)

哈希大数据

对于大的数据块,你可以分多次更新哈希对象,而不需要一次性加载整个数据。这在处理大文件或大量数据时非常有用:

# 假设我们有一个大文件
file_path = 'path_to_large_file'

# 创建一个新的散列对象
hash_object = hashlib.sha256()

# 以二进制模式打开文件,读取并更新哈希对象
with open(file_path, 'rb') as file:
    for chunk in iter(lambda: file.read(4096), b''):
        hash_object.update(chunk)

# 获取十六进制格式的完整散列
hash_hex = hash_object.hexdigest()

print(hash_hex)

使用哈希加盐保护密码

在保存用户密码时,通常对密码进行哈希,并加上“盐”(随机数据)以提高安全性:

import os

# 生成一个随机盐
salt = os.urandom(32)  # 32 个字节的盐

# 用户的密码
password = 'p@ssw0rd'

# 创建一个新的散列对象,并加上盐
hash_object = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)

# pbkdf2_hmac 返回的是一个字节字符串,使用 hex() 方法转换为十六进制格式
hash_hex = hash_object.hex()

print(hash_hex)

        在上面的例子中,使用了 pbkdf2_hmac 函数,它实现了 PBKDF2 密码哈希算法,其中使用了一个加盐的 HMAC。100000 表示迭代的次数,这个数字越大,生成散列所需的时间越长,攻击者猜测密码的难度也越大。

注意事项

  • 由于 MD5 和 SHA1 算法已被证明存在缺陷,更安全的做法是使用 SHA256 或 SHA512
  • 对于密码保护,请使用 hashlib 提供的更安全的函数,如 pbkdf2_hmac,而不是简单的散列算法。hashlib 提供的函数非常适合加密应用,但请注意,它们不提供完整的加密解决方案。在涉及复杂加密需求的场景下,请使用更专业的加密库,如 PyCryptodomecryptography
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值