4729698049
git-subtree-dir: paste-framework git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
import base64
|
|
|
|
from cryptography.hazmat.primitives import serialization
|
|
from cryptography.hazmat.primitives.asymmetric import padding, rsa
|
|
|
|
|
|
def generate_rsa_keypair():
|
|
"""
|
|
生成RSA密钥对,并返回公钥的PEM格式字符串。
|
|
|
|
此函数生成一个2048位的RSA密钥对,使用65537作为公钥指数。
|
|
仅返回公钥部分的PEM编码字符串,私钥不返回以确保安全性。
|
|
|
|
返回:
|
|
str: 公钥的PEM格式字符串,包含-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----头尾。
|
|
|
|
示例:
|
|
-----BEGIN PUBLIC KEY-----
|
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
|
|
-----END PUBLIC KEY-----
|
|
|
|
注意:
|
|
- 私钥在此函数中生成但未返回,应由调用方安全存储。
|
|
- 不建议在生产环境中直接使用此函数生成密钥,应使用更安全的密钥管理服务。
|
|
"""
|
|
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
|
|
public_key = private_key.public_key()
|
|
|
|
# 获取公钥的 PEM 格式
|
|
public_pem = public_key.public_bytes(
|
|
encoding=serialization.Encoding.PEM,
|
|
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
|
).decode('utf-8')
|
|
|
|
return public_pem
|
|
|
|
|
|
def rsa_encrypt_pkcs1_v1_5(public_key_pem, plaintext):
|
|
"""
|
|
使用 PKCS#1 v1.5 填充对字符串进行 RSA 加密。
|
|
|
|
:param public_key_pem: 公钥的 PEM 格式字符串
|
|
:param plaintext: 要加密的明文字符串
|
|
:return: Base64 编码的加密后字节串
|
|
"""
|
|
# 加载公钥
|
|
public_key = serialization.load_pem_public_key(public_key_pem.encode())
|
|
|
|
# 将字符串编码为字节
|
|
plaintext_bytes = plaintext.encode('utf-8')
|
|
|
|
# 使用 PKCS#1 v1.5 填充进行加密
|
|
ciphertext = public_key.encrypt(
|
|
plaintext_bytes,
|
|
padding.PKCS1v15()
|
|
)
|
|
|
|
# 返回 Base64 编码的加密结果
|
|
return base64.b64encode(ciphertext).decode('utf-8') |