我在使用openssl翻译RSA pub密钥时遇到了一个问题,我想获得DER格式的公钥。这是我做的:
生成RSA密钥对 openssl genrsa -out alice.key 1024
仅从my.key导出公钥 a)openssl rsa -in alice.pem -RSAPublicKey_out -out alice_pub.pem b)openssl rsa -in alice.pem -poutout -out alice_pub2.pem
这两种方法在.pem中生成不同的页脚:第一个输出
--Begin RSA public key ----
和第二项产出
-- Begin Public key ----
使用openssl asn1parse分析两个公钥pem文件openssl asn1 parse -inform PEM -in alice_pub.pem
时,发生了意外情况。
对于alice_pub.pem,它运行良好;对于alice_pub2.pem,openssl无法提取“N”和“E”参数,表明它们已经是“rsaEncryption”。
Openssl只能将第二个pem转换为DER,但是,pem内容明显不正确......
答案 0 :(得分:0)
当你说OpenSSL只能将第二个PEM变换为DER时,你不清楚你是什么意思 - openssl asn1parse
可以同时读取这两个PEM并输出为DER。
-RSAPublicKey_out
的输出只是公钥而没有额外的换行,当通过openssl asn1parse
时,您会得到以下内容:
0:d=0 hl=3 l= 137 cons: SEQUENCE
3:d=1 hl=3 l= 129 prim: INTEGER :...
135:d=1 hl=2 l= 3 prim: INTEGER :010001
然而,-pubout
生成的输出是X509格式的公钥,当通过openssl asn1parse
时,您会得到以下输出:
0:d=0 hl=3 l= 159 cons: SEQUENCE
3:d=1 hl=2 l= 13 cons: SEQUENCE
5:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
16:d=2 hl=2 l= 0 prim: NULL
18:d=1 hl=3 l= 141 prim: BIT STRING
此格式将公钥(显示为未解码为BIT STRING
)包含一个指示符,表明它是 RSA 公钥(rsaEncryption
)。
您可以使用-pubout
的{{1}}选项在-strparse
输出中显示已编码公钥的详细信息。在上面的输出中,您可以看到openssl asn1parse
位于偏移18处,因此使用:
BIT STRING
您将获得以下内容:
openssl asn1parse -inform PEM -in alice_pub2.pem -strparse 18
换句话说,与 0:d=0 hl=3 l= 137 cons: SEQUENCE
3:d=1 hl=3 l= 129 prim: INTEGER :...
135:d=1 hl=2 l= 3 prim: INTEGER :010001
的{{1}}选项生成的原始RSA公钥完全相同。