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')