命令行工具将RSA私钥导出到RSAPublicKey

时间:2012-01-09 07:01:10

标签: openssl rsa

今天我发现有两种带有PEM格式标题的公钥格式,例如

X.509 SubjectPublicKeyInfo** (PEM header: BEGIN PUBLIC KEY)

对应于短标题表单;

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsQ7MkLsc1lJ8S2WtItN
cfj7pbdB6PVcRHEEjbie97Rqthkr6h2WE5rVj0BZNwFjs4NIUYws2KeQjexZ8NEY
qpcP9iPMjdNgLpU8uL03QMti+y+y0IU4493KxKxjprjtu6no0/O5TwNs+/r+7hmF
/8d+2mhyLJQbtuvQQ6mvg6roCMuqzRS91SObzT1ojCjY+AbUrmVZ5jmklHCv7uah
EoTsB3S7wHCBRmelh2j5fWrRBay4h0IB/NSrt1dO/UEVmDSWGjnG+RsDMhYGZXJ1
hJawhqrbuVRZvrMyzqQ0j1xy5buS6jqSHA3wdOixdI8dDpvBnUDGqEIU6gl2Am7h
pwIDAQAB
-----END PUBLIC KEY-----

PKCS#1 RSAPublicKey* (PEM header: BEGIN RSA PUBLIC KEY)

对应较长的形式;

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1+skaD+II3MYF/0iGDcFX/E6b0XzSC8I2RapRaCL84EqY8HxWGKn
+7p34ZJwZx9avX0cCUqvTmS6LtuoSGrdLlahrz1qEnkdYqlo9HXXQiKtA9iwaiId
LxPtCnJnGMOMtolwKAJpsr+l68D41mWvvibrwPbeTJsFi0zvrN0rL1YbVYvw3X85
fQm+wgo3s8I5sOWwlkADvfD37KxteEPitfb2cvGfYo+VIhBqqXQUhQSC3jBAUc5o
+P8U3eu84ln2YqiIg9P/iM99HoKFECJ2+mxWM8oz0rS8oqthVOck+KZ7mBiYjEzW
3ytTJIUpX9Sl88oDqkz7Azku/GVEiJNWSQIDAQAB
-----END RSA PUBLIC KEY-----

我想验证后一种格式的一些公钥,但我看不出openssl命令行工具显然可以做到这一点。 -pubout导出第一种格式,而pubin格式拒绝第二种标题;

#openssl rsa -pubin -in rsa.pub -modulus -noout

unable to load Public Key
140154809448256:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: PUBLIC KEY

有关openssl的正确命令是什么的建议,或者是否有一些工具可以从命令行执行此操作?

2 个答案:

答案 0 :(得分:5)

我认为openssl命令行程序(rsa)不能读取PKCS#1格式。正如here所解释的,PKCS#1和PKCS#8格式之间的区别是算法标识符。 RSA加密的算法标识符为“1.2.840.113549.1.1.1”,其Base64版本为“MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A”,您可以安全地使用RSA公钥的Base64作为前缀,并将页眉/页脚更改为“BEGIN RSA PUBLIC” KEY“/”END RSA PUBLIC KEY“to”BEGIN PUBLIC KEY“/”END PUBLIC KEY“。

答案 1 :(得分:4)

openssl命令行程序可以读取PKCS#1格式...

如果您使用

openssl rsa -RSAPublicKey_in <inputFile> -pubout -out <outputFile>

它将从426字节长的rsa公钥生成451字节长的公钥。