今天我发现有 2 种带有 PEM 格式 header 的公钥格式,例如

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 格式拒绝第二个 header ;
#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 的正确命令是什么的任何建议,或者是否有一些工具可以从命令行执行此操作?

请您参考如下方法:

我不认为 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”到“BEGIN PUBLIC KEY”/“END PUBLIC KEY”。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!