python - P12 中 pyOpenSSL 中的 RSA key 参数

标签 python cryptography rsa pyopenssl

我正在使用 pyOpenSSL 并且有一个 PKCS12 对象,并且使用 get_privateKey()get_publicKey() 方法可以获得 RSA 私钥/公钥对象。有没有办法从这些对象中提取 RSA key 参数(p、q、dp、dq、qinv)?

最佳答案

您可以使用ASN1解析器来获取关键参数:

from OpenSSL.crypto import dump_privatekey, FILETYPE_ASN1
from Crypto.Util.asn1 import DerSequence

private_key_der = DerSequence()
# private_key is obtained from PKCS12 object using get_privateKey()
private_key_der.decode(dump_privatekey(FILETYPE_ASN1, private_key))

private_key_der 将根据以下 der 结构包含关键参数

RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

在Python中相当于:

private_key_der[0] # version
private_key_der[1] # modulus
private_key_der[2] # publicExponent
private_key_der[3] # privateExponent
private_key_der[4] # prime1
private_key_der[5] # prime2
private_key_der[6] # exponent1
private_key_der[7] # exponent2
private_key_der[8] # coefficient
private_key_der[9] # otherPrimeInfos

关于python - P12 中 pyOpenSSL 中的 RSA key 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783971/

相关文章:

Python:参数 - 允许 4 个参数,给定 5 个

node.js - 如何解密在 nodejs 中加密的 golang 中的 AES256 位密码?

node.js - Node.js 中的 XML 到 PEM

java - 椭圆曲线点

encryption - SonarQube : Make sure that encrypting data is safe here. AES/GCM/NoPadding、RSA/ECB/PKCS1Padding

javascript - 如何对数组中的每个对象执行计算,然后输出该数组?

python - 如何以非阻塞的方式处理websocket数据?

python - 如何通过 Client.post() 从 Django 测试中的表单上传文件?

python - Beautifulsoup 异常列表超出范围

java - 在 Java 和 Crypto++ 代码之间传递 RSA key