openssl - 从 PEM 到 DER 的 RSA public 密钥
openssl - RSA public key from PEM to DER
我在使用 openssl 翻译 RSA 公钥时遇到问题,我想获得 DER 格式的 public 密钥。这是我所做的:
生成RSA密钥对
openssl genrsa -out alice.key 1024
仅从 my.key 导出 public 密钥
a) openssl rsa -in alice.pem -RSAPublicKey_out -out alice_pub.pem
b) openssl rsa -in alice.pem -pubout -out alice_pub2.pem
这两种方法在 .pem 中生成不同的页脚:第一种方法输出
--Begin RSA public key ----
,第二个输出
-- Begin Public key ----
在使用openssl asn1parse分析public两个关键pem文件openssl asn1 parse -inform PEM -in alice_pub.pem
时,发生了意想不到的事情。
对于alice_pub.pem,效果不错;对于 alice_pub2.pem,openssl 无法提取 "N" 和 "E" 参数,表明它们是 "rsaEncryption"。
openssl只能将第二个pem转为DER,但是pem内容明显不对...
请告诉我如何解决这个问题。非常感谢。这个问题很容易重现。
当您说 OpenSSL 只能将第二个 PEM 转换为 DER 时,您的意思不清楚 - openssl asn1parse
可以读取两者并将两者都输出为 DER。
-RSAPublicKey_out
的输出只是 public 键,没有额外的包装,当通过 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 格式的 public 密钥,当通过 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
此格式将 public 密钥(未解码显示为 BIT STRING
)与一个指示符,表明它是 RSA public 密钥(rsaEncryption
).
您可以使用 openssl asn1parse
的 -strparse
选项在 -pubout
输出中显示编码的 public 密钥的详细信息。在上面的输出中,您可以看到 BIT STRING
位于偏移量 18,因此使用:
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
换句话说,与 openssl rsa
的 -RSAPublicKey_out
选项生成的原始 RSA public 密钥完全相同的数据。
我在使用 openssl 翻译 RSA 公钥时遇到问题,我想获得 DER 格式的 public 密钥。这是我所做的:
生成RSA密钥对 openssl genrsa -out alice.key 1024
仅从 my.key 导出 public 密钥 a) openssl rsa -in alice.pem -RSAPublicKey_out -out alice_pub.pem b) openssl rsa -in alice.pem -pubout -out alice_pub2.pem
这两种方法在 .pem 中生成不同的页脚:第一种方法输出
--Begin RSA public key ----
,第二个输出
-- Begin Public key ----
在使用openssl asn1parse分析public两个关键pem文件
openssl asn1 parse -inform PEM -in alice_pub.pem
时,发生了意想不到的事情。 对于alice_pub.pem,效果不错;对于 alice_pub2.pem,openssl 无法提取 "N" 和 "E" 参数,表明它们是 "rsaEncryption"。openssl只能将第二个pem转为DER,但是pem内容明显不对...
请告诉我如何解决这个问题。非常感谢。这个问题很容易重现。
当您说 OpenSSL 只能将第二个 PEM 转换为 DER 时,您的意思不清楚 - openssl asn1parse
可以读取两者并将两者都输出为 DER。
-RSAPublicKey_out
的输出只是 public 键,没有额外的包装,当通过 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 格式的 public 密钥,当通过 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
此格式将 public 密钥(未解码显示为 BIT STRING
)与一个指示符,表明它是 RSA public 密钥(rsaEncryption
).
您可以使用 openssl asn1parse
的 -strparse
选项在 -pubout
输出中显示编码的 public 密钥的详细信息。在上面的输出中,您可以看到 BIT STRING
位于偏移量 18,因此使用:
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
换句话说,与 openssl rsa
的 -RSAPublicKey_out
选项生成的原始 RSA public 密钥完全相同的数据。