RSA-4096 密钥在 cryptography 和 GMP 库之间的转换

在 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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值