在 cryptography (Python) 和 GMP (C语言) 之间转换 RSA-4096 密钥需要注意两者的密钥表示格式差异。以下是详细的转换方法:
密钥格式对比
| 特性 |
cryptography (Python) |
GMP (C语言) |
| 私钥格式 |
PKCS#8 PEM/DER |
自定义格式 (通常为原始大整数) |
| 公钥格式 |
X.509 SubjectPublicKeyInfo PEM/DER |
自定义格式 (通常为 (e, n) 对) |
| 典型文件扩展名 |
.pem, .der |
自定义 (常为二进制或文本数字) |
方法 1,以原始整数形式在 GMP 和 Cryptography 之间转换
(1)在 python 中,从 cryptography 导出供 GMP 使用的密钥
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
def export_for_gmp(private_key):
# 获取RSA参数
private_numbers = private_key.private_numbers()
public_numbers = private_key.public_key().public_numbers()
return {
'n': public_numbers.n, # 模数
'e': public_numbers.e, # 公钥指数
'd': private_numbers.d, # 私钥指数
'p': private_numbers.p, # 第一个素数
'q': private_numbers.q, # 第二个素数
'dmp1': private_numbers.dmp1, # d mod (p-1)
'dmq1': private_numbers.dmq1, # d mod (q-1)
'iqmp': private_numbers.iqmp # q^-1 mod p
}
def generate_rsa_keypair():
"""生成RSA-4096密钥对"""
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=4096, # 使用4096位密钥
backend=default_backend()
)
public_key = private_key.public_key()
return private_key, public_key
# 1. 生成密钥对
private_key, public_key =

最低0.47元/天 解锁文章
2010

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



