用于导出RSA私钥至RSAPublicKey的命令行工具

6
今天我发现有两种带有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个回答

8
我认为openssl命令行程序(rsa)无法读取PKCS#1格式。如这里所解释的,PKCS#1和PKCS#8格式之间的区别在于算法标识符。RSA加密的算法标识符是"1.2.840.113549.1.1.1",其Base64版本为"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A",您可以安全地将其前缀与RSA公钥的Base64版本相结合,并将标题/尾部从"BEGIN RSA PUBLIC KEY"/"END RSA PUBLIC KEY"更改为"BEGIN PUBLIC KEY"/"END PUBLIC KEY"。

该前缀仅适用于具有2048位模数的密钥,这在2012年是相当普遍的,在2018年更加普及,但也有例外情况。此外,指数为3个八位字节,如“F4”=第四个费马素数=65537,这相当普遍但并非普遍适用。 - dave_thompson_085
那个问题是一年后提出的,所以如果有什么的话...那就是这个问题的重复。他们也在询问略有不同的事情。 - Tom

4

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

如果您使用

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

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


仅支持1.0.0及以上版本(首次发布于2010年,在2012年仍相对罕见,现在非常普遍)。为了回答确切的问题,“rsa -in privkey -RSAPublicKey_out”会“写入”“传统”的形式。 - dave_thompson_085

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接