Squashed 'paste-framework/' content from commit 34e8684
git-subtree-dir: paste-framework git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user