简介
最近有小伙伴们搞不清楚RSA的私钥PKCS1与PKCS8到底是什么区别。在应用中会有各种各样的疑问。这边文章就稍微详细的讲一下这两种格式的区别。
PKCS1:全名《Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications》最新版本2.2 (rfc8017, 有兴趣的同学可以读一下) ,从名称上可以看出它是针对RSA算法的一个规范。里面包含了RSA加密、解密、签名验签等所有的内容,当然也包含了私钥的格式。PKCS1的1.1版本是1991年发布的。
PKCS8:全名《Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification》最新版本1.2,从名称上可以看出它是一个专门用来存储私钥的文件格式规范。PKCS1的1.2版本是2008年发布的。
刚好它们两个有重合的部分,都定义了私钥的存储,那他们到底有什么关系呢?我们下面实际验证一下。
验证
产生RSA私钥
bash# openssl genrsa -out pkcs1.pem 1024
此时当前目录下就有一个pkcs1.pem文件,查看文件内容可以看到
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCss7fSp+qZaACgW+rFStHODx8Z7Hr1bFMxnqde61SmcF6dbuc/
C1lgJY/FyrTPxlu4wGNpThVn1lPfvQKCNn492kd8kl0863fhU3rk+7/18R+uQCrp
sz9RGz1zSSmRH2m3igwzNafjiu9vAJ7emZ5QmTGIGqAao62w7waXx8gfIwIDAQAB
AoGAKJj+x2htv64xJ4E0CTjzZQss9n0e0n6qd+mh0rBjb9TOiRe/CJT0Z6OszoQ+
SPGKMj4XoHOYmJZLlTbrVgzVU/XgMFuz92IDPhaSafHpk143BVu6fc0Hvt+KIfUq
tj0hSHInW1tICQRA3OJoUDWTNTNbD+iNQx+6T53AGY3nZpECQQDggckjDYKB9SDB
8tG4oiC3H/rHcW9Iy9cVKFIqKy+1kHiFJjsGaY8JWpNr4e0xSaVyC9oi7ICJJkWw
e94RCdE1AkEAxO2T3U9YNOQoqOt4DgzURClzJtbD1lXmcb5MPKkLxcgBPzGVor21
19vCgGmMk/n162vys5YHfixeg8XLINfR9wJAP6itdtIC2oS+SCBpFThrnGFmA52H
l5WtJCOtwKVEPvB7LA4eGIBf/aAAQ0vprNscHY18ygBTphADHLrSyfQFrQJAduth
F4wKoCYHx7oqTZHBvUeqmhGnQY+uEZHxR9Bto4ob9qViz1vwq+GxmwoiMloH/5q4
fWpkK/VvPfP7rmGmEQJBAIdhwWNOhIml+6bS3MxLwFklwWALBzZMvOKWfKTQ9vA6
X27ZNTBt0ij25MI26sD7dtuFq277Ns99+Qdwr5FVjng=
-----END RSA PRIVATE KEY-----
将私钥转为PKCS8
bash# openssl pkcs8 -topk8 -inform PEM -in pkcs1.pem -outform PEM -nocrypt -out pkcs8.pem
此时当前目录下会多出一个pkcs8.pem文件,查看文件内容可以看到
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKyzt9Kn6ploAKBb
6sVK0c4PHxnsevVsUzGep17rVKZwXp1u5z8LWWAlj8XKtM/GW7jAY2lOFWfWU9+9
AoI2fj3aR3ySXTzrd+FTeuT7v/XxH65AKumzP1EbPXNJKZEfabeKDDM1p+OK728A
nt6ZnlCZMYgaoBqjrbDvBpfHyB8jAgMBAAECgYAomP7HaG2/rjEngTQJOPNlCyz2
fR7Sfqp36aHSsGNv1M6JF78IlPRno6zOhD5I8YoyPhegc5iYlkuVNutWDNVT9eAw
W7P3YgM+FpJp8emTXjcFW7p9zQe+34oh9Sq2PSFIcidbW0gJBEDc4mhQNZM1M1sP
6I1DH7pPncAZjedmkQJBAOCBySMNgoH1IMHy0biiILcf+s