Files
d3i-szct/paste/security/cryp_rsa.py
T
zwf 4729698049 Squashed 'paste-framework/' content from commit 34e8684
git-subtree-dir: paste-framework
git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
2026-06-02 19:09:22 +08:00

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