我有一个RSA密钥的 public exponent
(e), modulus
(n)和 private exponent
(d),如何将它们转换为 PEM
格式的RSA密钥或openssl中定义的RSA结构?
我想使用带有openssl的RSA私钥来签名文本,可以使用 C
代码或 openssl
实用程序 .
我有很多帖子可以从 PEM
键中提取参数,但未能找到有关如何使用 C
将它们转换回PEM的有用信息 . 似乎这不是常见的情况......
编辑:对不起, Headers 有点误导,我的最终目的是用它来签名留言(如说明中所述)
2 回答
RSA数学只需要
n
和d
来实现签名 . 此外,OpenSSL的实现也只需要n
和d
来进行签名 . 您可以直接在RSA结构中设置这些值 . 此示例仅显示"...sign text with RSA private key with openssl ... in C code"的示例,并忽略您的PEM查询 .通常与私钥相关的其他值
p
,q
等并非绝对必要 . 如果存在,它们可用于加速私钥操作,包括利用中国剩余定理进行签名 . 此外,如果需要,可以从n
,d
和e
轻松派生它们:例如,参见section 8.2.2 (i) of the Handbook Of Applied Cryptography .我没有生成RSA密钥所需的素数,
p
和q
.RSA密钥需要用于计算
n
,e
和d
的原始素数,因此仅使用它们不足以生成整个RSA密钥 .有关详细信息,请参阅ASN1编码文档here .
编辑:@GregS:
n
和d
对于公私密钥对是不够的,因为e
实际上是密钥(n,e)
和(d,e)
的一部分 .从here,您可以看到RSA私钥需要
prime1, p
和prime2, q
,而公钥只需要(n,e)
.