Cryptography,一个神奇的 Python 库!
Cryptography,一个神奇的 Python 库!
一、什么是 Cryptography?
Cryptography 是 Python 中用于加密和解密的强大库,它提供了现代加密算法和协议的实现,支持对称加密、非对称加密、数字签名以及哈希等功能。无论是构建安全的应用程序,还是学习密码学知识,cryptography
都是一个得力工具。
二、安装 Cryptography
在使用前,需要通过以下命令安装:
pip install cryptography
三、Cryptography 的核心功能
Cryptography 提供两种主要层次的 API:
- Hazmat 层:底层 API,用于直接实现复杂的加密逻辑。
- 加密层:高级 API,便于快速实现常见加密功能。
四、对称加密示例
对称加密使用同一个密钥加密和解密数据。Cryptography 提供了 AES(高级加密标准)等常见算法的支持。
示例:AES 加密和解密
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import os
# 1. 生成密钥和初始化向量 (IV)
key = os.urandom(32) # 256 位密钥
iv = os.urandom(16) # 128 位初始化向量
# 2. 创建加密器
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
encryptor = cipher.encryptor()
# 3. 加密数据
data = b"Hello, Cryptography!" # 原始数据
padder = padding.PKCS7(algorithms.AES.block_size).padder() # 填充数据
padded_data = padder.update(data) + padder.finalize()
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
print("加密后的数据:", encrypted_data)
# 4. 解密数据
decryptor = cipher.decryptor()
decrypted_padded_data = decryptor.update(encrypted_data) + decryptor.finalize()
# 5. 移除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
decrypted_data = unpadder.update(decrypted_padded_data) + unpadder.finalize()
print("解密后的数据:", decrypted_data.decode())
运行结果
加密后的数据: b'\xaf\x1b\x...'
解密后的数据: Hello, Cryptography!
五、非对称加密示例
非对称加密使用公钥加密、私钥解密。常用算法包括 RSA 和 ECC。
示例:生成 RSA 密钥并加密解密
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
# 1. 生成 RSA 密钥对
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
# 2. 使用公钥加密数据
message = b"Hello, RSA!"
encrypted_message = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("加密后的数据:", encrypted_message)
# 3. 使用私钥解密数据
decrypted_message = private_key.decrypt(
encrypted_message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("解密后的数据:", decrypted_message.decode())
运行结果
加密后的数据: b'\x89\x15...'
解密后的数据: Hello, RSA!
六、哈希算法示例
哈希算法是一种将数据映射到固定长度字符串的单向函数,常用于数据完整性校验。
示例:SHA-256 哈希
from cryptography.hazmat.primitives import hashes
# 创建哈希对象
digest = hashes.Hash(hashes.SHA256())
digest.update(b"Hello, Cryptography!")
hash_value = digest.finalize()
print("SHA-256 哈希值:", hash_value.hex())
运行结果
SHA-256 哈希值: 33297f...
七、数字签名示例
数字签名用于验证数据的真实性和完整性。
示例:RSA 数字签名
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# 1. 签名数据
message = b"Secure Message"
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("数字签名:", signature)
# 2. 验证签名
try:
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("签名验证成功!")
except:
print("签名验证失败!")
八、常见问题
1. 密钥如何安全存储?
- 使用 密钥管理服务(KMS) 或安全的硬件设备(如 HSM)。
- 使用文件加密或数据库加密存储密钥。
2. 为什么选择 Cryptography 而不是其他库?
- Cryptography 提供更高的安全性和最新算法的实现。
- 它支持高级和底层 API,既适合初学者也适合专家。
九、总结
通过 Cryptography,你可以轻松实现加密、解密、哈希、数字签名等操作。它的简洁 API 和强大功能使其成为 Python 安全编程的首选工具。
建议:从基础加密 API 入手,逐步学习高级功能,最终结合实际需求设计安全的系统!
评论已关闭