“BEGIN RSA PRIVATE KEY”和“BEGIN PRIVATE KEY”之间的区别是什么?

您好我正在写一个程序,从一个.pem文件导入私钥,并创build一个私钥对象以后使用它..我遇到的问题是一些pem文件头开头

 -----BEGIN PRIVATE KEY----- 

而另一些则以开始

 -----BEGIN RSA PRIVATE KEY----- 

通过我的search,我知道第一个是PKCS#8格式,但我不知道另一个属于什么格式。

请参阅https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem (在页面search“BEGIN RSA PRIVATE KEY”)( 存档链接为了后代,以防万一)。

BEGIN RSA PRIVATE KEY是PKCS#1,只是一个RSA密钥。 它本质上只是来自PKCS#8的关键对象,但没有前面的版本或algorithm标识符。 BEGIN PRIVATE KEY是PKCS#8,表示密钥types包含在密钥数据本身中。 从链接:

未encryption的PKCS#8编码数据以标签开头和结尾:

 -----BEGIN PRIVATE KEY----- BASE64 ENCODED DATA -----END PRIVATE KEY----- 

在base64编码数据中,存在以下DER结构:

 PrivateKeyInfo ::= SEQUENCE { version Version, algorithm AlgorithmIdentifier, PrivateKey BIT STRING } AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } 

因此,对于RSA私钥,OID是1.2.840.113549.1.1.1,并且存在RSAPrivateKey作为PrivateKey密钥数据位串。

BEGIN RSA PRIVATE KEY (始终指定RSA密钥,因此不包含密钥typesOID)相反。 BEGIN RSA PRIVATE KEYPKCS#1

RSA私钥文件(PKCS#1)

RSA私钥PEM文件特定于RSA密钥。

它以标签开始和结束:

 -----BEGIN RSA PRIVATE KEY----- BASE64 ENCODED DATA -----END RSA PRIVATE KEY----- 

在base64编码数据中,存在以下DER结构:

 RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL } 

看看这个 。 它给出了可能的BEGIN标记。

复制上述链接中的内容以供快速参考:

 #define PEM_STRING_X509_OLD "X509 CERTIFICATE" #define PEM_STRING_X509 "CERTIFICATE" #define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" #define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" #define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" #define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" #define PEM_STRING_X509_CRL "X509 CRL" #define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" #define PEM_STRING_PUBLIC "PUBLIC KEY" #define PEM_STRING_RSA "RSA PRIVATE KEY" #define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" #define PEM_STRING_DSA "DSA PRIVATE KEY" #define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" #define PEM_STRING_PKCS7 "PKCS7" #define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" #define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" #define PEM_STRING_PKCS8INF "PRIVATE KEY" #define PEM_STRING_DHPARAMS "DH PARAMETERS" #define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" #define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" #define PEM_STRING_DSAPARAMS "DSA PARAMETERS" #define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" #define PEM_STRING_ECPARAMETERS "EC PARAMETERS" #define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" #define PEM_STRING_PARAMETERS "PARAMETERS" #define PEM_STRING_CMS "CMS"