Python内置了多个安全相关的标准库,无需额外安装第三方依赖就能实现加密、随机数生成、网络通信加密等安全功能,合理使用这些库可以有效提升程序的安全性,避免自行实现安全逻辑带来的风险。

hashlib库:哈希计算与数据校验
hashlib库提供了常见的哈希算法实现,包括MD5、SHA1、SHA256等,常用于数据完整性校验、密码存储等场景,注意MD5和SHA1已经不适合用于安全敏感场景的密码存储,推荐使用SHA256及以上算法。
基本使用示例
计算字符串的SHA256哈希值:
import hashlib
# 待计算哈希的原始数据
data = "hello_python_security"
# 创建SHA256哈希对象
hash_obj = hashlib.sha256()
# 更新哈希对象内容,注意需要传入bytes类型数据
hash_obj.update(data.encode("utf-8"))
# 获取十六进制格式的哈希结果
result = hash_obj.hexdigest()
print(f"SHA256哈希结果:{result}")
文件完整性校验示例
计算大文件的哈希值避免一次性加载文件到内存:
import hashlib
def get_file_sha256(file_path):
hash_obj = hashlib.sha256()
# 分块读取文件,每块大小为8192字节
with open(file_path, "rb") as f:
while chunk := f.read(8192):
hash_obj.update(chunk)
return hash_obj.hexdigest()
file_hash = get_file_sha256("test.txt")
print(f"文件SHA256哈希值:{file_hash}")
secrets库:安全随机数生成
secrets库是Python3.6+引入的专门用于生成安全随机数的标准库,适合用于生成密码、令牌、密钥等安全敏感场景的随机内容,比random库生成的随机数更安全,random库不适合用于安全相关场景。
生成安全随机字符串
生成指定长度的安全随机十六进制字符串:
import secrets
# 生成16字节的安全随机内容,转换为32位十六进制字符串
token = secrets.token_hex(16)
print(f"安全随机令牌:{token}")
# 生成指定长度的随机字母数字字符串
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
random_str = "".join(secrets.choice(alphabet) for _ in range(20))
print(f"20位随机字符串:{random_str}")
生成安全随机整数
生成指定范围内的安全随机整数:
import secrets
# 生成1到100之间的安全随机整数
random_num = secrets.randbelow(100) + 1
print(f"1-100之间的安全随机数:{random_num}")
# 生成指定范围内的随机整数,包含上下界
random_int = secrets.randbits(8) # 生成0到255之间的随机整数
print(f"0-255之间的随机整数:{random_int}")
ssl库:网络通信加密
ssl库提供了SSL/TLS协议的实现,用于在网络通信中建立加密连接,常见于HTTPS请求、加密Socket通信等场景,避免数据在网络传输过程中被窃听或篡改。
验证HTTPS证书示例
使用ssl库配置HTTPS请求的证书验证:
import ssl
import socket
# 创建默认SSL上下文,会自动验证服务器证书
ssl_context = ssl.create_default_context()
# 建立加密Socket连接
with socket.create_connection(("ipipp.com", 443)) as sock:
with ssl_context.wrap_socket(sock, server_hostname="ipipp.com") as ssl_sock:
# 发送HTTP请求
ssl_sock.sendall(b"GET / HTTP/1.1rnHost: ipipp.comrnrn")
# 接收响应
response = ssl_sock.recv(4096)
print(f"响应内容:{response.decode('utf-8', errors='ignore')}")
自定义SSL证书验证
如果需要使用自签名证书或者自定义证书验证逻辑,可以修改SSL上下文配置:
import ssl
# 创建SSL上下文
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
# 加载自定义CA证书文件
ssl_context.load_verify_locations("custom_ca.pem")
# 设置证书验证模式,CERT_REQUIRED表示必须验证服务器证书
ssl_context.verify_mode = ssl.CERT_REQUIRED
其他常用安全标准库
除了上述三个库,Python还有其他安全相关的标准库:
hmac库:用于生成消息认证码,验证数据完整性和真实性,避免数据被篡改base64库:用于Base64编码解码,注意Base64不是加密算法,只是编码方式,不能用于敏感数据加密getpass库:用于安全输入密码,输入内容不会显示在终端上
hmac使用示例
import hmac
import hashlib
# 密钥,需要保密
secret_key = b"my_secret_key_123"
# 待验证的消息
message = b"hello_hmac_test"
# 生成HMAC值,使用SHA256作为哈希算法
hmac_obj = hmac.new(secret_key, message, hashlib.sha256)
hmac_result = hmac_obj.hexdigest()
print(f"HMAC结果:{hmac_result}")
# 验证HMAC值
is_valid = hmac.compare_digest(hmac_result, hmac.new(secret_key, message, hashlib.sha256).hexdigest())
print(f"HMAC验证结果:{is_valid}")
使用注意事项
- 不要自行实现加密算法,优先使用标准库提供的成熟实现,避免引入安全漏洞
- 敏感数据如密码不要明文存储,建议使用哈希算法加盐存储,盐值需要随机生成且每个用户不同
- 安全随机数场景不要使用random库,优先使用secrets库
- 网络传输敏感数据时务必使用SSL/TLS加密,避免明文传输