Python:hashlib 库高级用法举例和应用详解

Python:hashlib库高级用法举例和应用详解

模块介绍

hashlib 模块是 Python 的标准库之一,提供了多种安全哈希和消息摘要算法,例如 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 等。通过这些算法,开发者可以生成消息摘要以验证数据的完整性和安全性。hashlib 模块在 Python 3 中已经是内置的,不需要额外安装。适配的 Python 版本为 Python 3.0 及以上。

应用场景

hashlib 模块主要用于以下几个场景:

  1. 数据完整性验证:确保数据在传输或存储过程中没有被篡改。
  2. 密码存储:通过哈希算法将密码加密存储,保证用户密码的安全。
  3. 数字签名:验证数据和身份真实性。
  4. 文件完整性检查:下载文件或软件时进行校验。

安装说明

hashlib 是 Python 的内置模块,默认已安装,无需额外安装。可以通过以下方式验证是否安装成功:

1
2
import hashlib  # 导入hashlib模块
print(hashlib.algorithms_available) # 打印可用的哈希算法列表

用法举例

1. 数据完整性验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import hashlib  # 导入hashlib模块

def hash_data(data):
"""哈希数据,返回摘要"""
sha256 = hashlib.sha256() # 创建SHA-256哈希对象
sha256.update(data.encode('utf-8')) # 加入数据,支持字符串需要编码为字节
return sha256.hexdigest() # 返回数据的十六进制摘要

original_data = "Hello, World!"
hash_result = hash_data(original_data) # 原始数据哈希
print(f"数据摘要: {hash_result}")

# 数据发送后接收端再次计算哈希,验证数据完整性
received_data = "Hello, World!"
received_hash_result = hash_data(received_data) # 接收数据哈希
if received_hash_result == hash_result:
print("数据完整,无篡改!")
else:
print("数据被篡改!")

2. 密码存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import hashlib  # 导入hashlib模块
import os # 导入os模块

def hash_password(password):
"""生成密码哈希及盐值"""
salt = os.urandom(16) # 生成16字节的盐值
pwd_hash = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000) # 生成密码哈希
return salt + pwd_hash # 返回盐值与密码哈希

def verify_password(stored_password, input_password):
"""验证密码是否正确"""
salt = stored_password[:16] # 提取盐值
stored_pwd_hash = stored_password[16:] # 提取密码哈希
pwd_hash = hashlib.pbkdf2_hmac('sha256', input_password.encode('utf-8'), salt, 100000) # 重新计算输入密码的哈希
return pwd_hash == stored_pwd_hash # 返回验证结果

# 存储密码
stored_password = hash_password('super_secure_password')
print(f"存储的密码哈希:{stored_password}")

# 验证密码
is_valid = verify_password(stored_password, 'super_secure_password')
print(f"密码验证通过: {is_valid}")

3. 文件完整性检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import hashlib  # 导入hashlib模块

def hash_file(filepath):
"""生成文件的哈希值"""
sha256 = hashlib.sha256() # 创建SHA-256哈希对象
with open(filepath, 'rb') as f: # 打开文件为二进制读取模式
while chunk := f.read(4096): # 按块读取文件内容
sha256.update(chunk) # 更新哈希对象
return sha256.hexdigest() # 返回文件的十六进制摘要

file_path = 'example.txt' # 假设文件路径
file_hash = hash_file(file_path) # 计算文件哈希
print(f"文件 '{file_path}' 的哈希值为: {file_hash}")

# 下载前后验证文件哈希是否一致
downloaded_file_path = 'downloaded_example.txt' # 假设下载后的文件路径
downloaded_file_hash = hash_file(downloaded_file_path) # 计算下载文件的哈希
if downloaded_file_hash == file_hash:
print("文件下载完整,无篡改!")
else:
print("文件已被篡改!")

在此介绍的哈希算法通过 hashlib 提供的高级应用方式,充分展示了如何在 Python 中使用哈希算法来保护数据的完整性和安全性。确保在敏感信息存储和数据传输中通过哈希算法来提高系统的安全性。

强烈建议大家关注本人的博客 —— 全糖冲击博客。关注我的博客,你将获取最新和最全面的 Python 标准库使用教程,极大地方便了查询和学习。不仅如此,还提供了众多实战案例,帮助你更好地理解并应用各个模块。感兴趣的朋友们千万不要错过哦!关注我的博客,让我们共同进步,共同成长!

软件版本可能变动

如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang