为何RSA私钥PEM文件内容与openssl pkey命令输出存在差异?
openssl pkey输出差异的原因 你遇到的差异核心是两种不同的RSA私钥编码格式导致的:
PKCS#1专用格式:你直接
cat查看的私钥属于这种RSA算法专属格式,页眉页脚为-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----。它的编码内容直接包含RSA私钥的核心字段(模数、公钥指数、私钥指数等),末尾的==是Base64编码的填充字符——因为Base64要求编码长度为4的整数倍,不足时会用等号补齐。PKCS#8通用格式:
openssl pkey -in my-priv-key.pem命令输出的是这种跨算法的通用私钥格式,页眉页脚为-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----。PKCS#8可以封装RSA、ECDSA等多种算法的私钥,内部会额外包含算法标识信息。openssl pkey工具默认会自动将输入的PKCS#1格式私钥转换为PKCS#8格式输出,这就是两者编码内容不同、后者无==的原因——两种格式的Base64编码内容本身存在差异,且PKCS#8的编码长度恰好满足Base64的要求,无需填充。
至于公钥的情况,若你的公钥本身是SPKI通用格式(页眉页脚为-----BEGIN PUBLIC KEY-----),openssl pkey -in my-pub-key.pem -pubin命令输出会和原文件一致;如果原公钥是PKCS#1的RSA PUBLIC KEY格式,该命令会转换为SPKI格式输出,只是你的场景下恰好原文件就是SPKI格式,所以输出与cat结果相同。
内容的提问来源于stack exchange,提问作者jmckitrick

