RSA 加密的基本概念
RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。它涉及公钥和私钥的生成,公钥用于加密数据,私钥用于解密数据。
安装必要的库
在 Python 中实现 RSA 加密通常使用 cryptography 或 PyCryptodome 库。以 PyCryptodome 为例,安装命令如下:
pip install pycryptodome
生成 RSA 密钥对
使用 Crypto.PublicKey.RSA 模块生成密钥对:
from Crypto.PublicKey import RSA
# 生成 2048 位的 RSA 密钥对
key = RSA.generate(2048)
# 获取私钥
private_key = key.export_key()
with open("private.pem", "wb") as f:
f.write(private_key)
# 获取公钥
public_key = key.publickey().export_key()
with open("public.pem", "wb") as f:
f.write(public_key)
使用公钥加密数据
加载公钥并对数据进行加密:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 加载公钥
with open("public.pem", "rb") as f:
public_key = RSA.import_key(f.read())
# 创建加密器
cipher = PKCS1_OAEP.new(public_key)
# 加密数据
data = b"Hello, RSA!"
encrypted_data = cipher.encrypt(data)
print("Encrypted:", encrypted_data)
使用私钥解密数据
加载私钥并对加密数据进行解密:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 加载私钥
with open("private.pem", "rb") as f:
private_key = RSA.import_key(f.read())
# 创建解密器
cipher = PKCS1_OAEP.new(private_key)
# 解密数据
decrypted_data = cipher.decrypt(encrypted_data)
print("Decrypted:", decrypted_data.decode())
注意事项
- RSA 加密有长度限制,通常只能加密比密钥长度短的数据(如 2048 位密钥最多加密 245 字节)。
- 对于大数据,建议使用对称加密(如 AES)加密数据,再用 RSA 加密对称密钥。
- 密钥文件(
.pem)应妥善保管,避免泄露私钥。
签名与验证(可选)
RSA 也可用于数字签名:
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
# 签名
hash_obj = SHA256.new(data)
signature = pkcs1_15.new(private_key).sign(hash_obj)
# 验证
try:
pkcs1_15.new(public_key).verify(hash_obj, signature)
print("Signature is valid.")
except (ValueError, TypeError):
print("Signature is invalid.")
426

被折叠的 条评论
为什么被折叠?



