边写代码零食不停口 盼盼麦香鸡味块 、卡乐比(Calbee)薯条三兄弟 独立小包、好时kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸
边写代码边贴面膜 事业美丽两不误 DR. YS 野森博士+【AOUFSE/澳芙雪特证】377专研美白淡斑面膜组合 优惠劵
别光顾写代码更要多喝茶水,提神有营养 六安瓜片茶叶茶香二级200g 2025年新茶雨前盒装自己喝
让AI成为我们的得力助手:《用Cursor玩转AI辅助编程——不写代码也能做软件开发》
cryptography
是 Python 中一个功能强大且广泛使用的密码学库,由 PyCA (Python Cryptographic Authority) 团队维护。它提供了安全的底层密码学原语和高层易用的「配方」(recipes),旨在替代不安全的旧库(如 pycrypto
)。以下是关键特性与使用示例:
核心功能
1. 对称加密(AES 等)
from cryptography.fernet import Fernet# 生成密钥
key = Fernet.generate_key()
cipher = Fernet(key)# 加密
encrypted = cipher.encrypt(b"Secret message")# 解密
decrypted = cipher.decrypt(encrypted) # b"Secret message"
2. 非对称加密(RSA)
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()# 序列化公钥
pem = public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo
)
3. 数字签名
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding# 签名
signature = private_key.sign(b"Data to sign",padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256()
)# 验证签名
public_key.verify(signature,b"Data to sign",padding.PSS(...), # 与签名相同参数hashes.SHA256()
)
4. 哈希函数(SHA-256 等)
from cryptography.hazmat.primitives import hashesdigest = hashes.Hash(hashes.SHA256())
digest.update(b"data")
result = digest.finalize() # 32字节哈希值
5. 密钥派生(KDF)
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hasheskdf = PBKDF2HMAC(algorithm=hashes.SHA256(),length=32, # 输出密钥长度salt=b"salt_value", # 随机盐值iterations=100000 # 迭代次数增强安全性
)
key = kdf.derive(b"password") # 派生密钥
6. X.509 证书操作
from cryptography import x509
from cryptography.x509.oid import NameOID# 创建自签名证书
subject = issuer = x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, "US"),x509.NameAttribute(NameOID.COMMON_NAME, "example.com")
])
cert = x509.CertificateBuilder().subject_name(subject).issuer_name(issuer).public_key(public_key).serial_number(x509.random_serial_number()).not_valid_before(now).not_valid_after(now + timedelta(days=365)).sign(private_key, hashes.SHA256())
安全实践
- 避免底层 API:优先使用高层接口(如
Fernet
),它们已内置安全最佳实践。 - 密钥管理:
- 使用
os.urandom
或secrets
模块生成随机数。 - 通过环境变量或专用工具(如 Vault)存储密钥。
- 使用
- 弃用警告:低层 API(
hazmat
)需谨慎使用,错误实现可能导致漏洞。
安装
pip install cryptography
为何选择 cryptography?
- 安全性:基于成熟的密码学后端(如 OpenSSL、Rust)。
- 活跃维护:定期更新修复漏洞。
- 符合标准:支持 FIPS 140-2、NIST 等标准。
- 丰富的文档:官方文档 提供详细指南。
注意:密码学极易因误用导致漏洞。除非必要,请使用高层 API,并参考专业安全审计。
Python 图书推荐
书名 | 出版社 | 推荐 |
---|---|---|
Python编程 从入门到实践 第3版(图灵出品) | 人民邮电出版社 | ★★★★★ |
Python数据科学手册(第2版)(图灵出品) | 人民邮电出版社 | ★★★★★ |
图形引擎开发入门:基于Python语言 | 电子工业出版社 | ★★★★★ |
科研论文配图绘制指南 基于Python(异步图书出品) | 人民邮电出版社 | ★★★★★ |
Effective Python:编写好Python的90个有效方法(第2版 英文版) | 人民邮电出版社 | ★★★★★ |
Python人工智能与机器学习(套装全5册) | 清华大学出版社 | ★★★★★ |
JAVA 图书推荐
书名 | 出版社 | 推荐 |
---|---|---|
Java核心技术 第12版:卷Ⅰ+卷Ⅱ | 机械工业出版社 | ★★★★★ |
Java核心技术 第11版 套装共2册 | 机械工业出版社 | ★★★★★ |
Java语言程序设计基础篇+进阶篇 原书第12版 套装共2册 | 机械工业出版社 | ★★★★★ |
Java 11官方参考手册(第11版) | 清华大学出版社 | ★★★★★ |
Offer来了:Java面试核心知识点精讲(第2版)(博文视点出品) | 电子工业出版社 | ★★★★★ |