您好,我正在编写一个程序,该程序从.pem文件并创建一个私钥对象以便稍后使用它..我面临的问题是一些pem文件头开头为

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

而其他人则以

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

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

答案

https://polarssl.org/kb/cryptography/asn1-key-structs-in-der-and-pem(搜索"BEGIN RSA PRIVATE KEY"页面)(存档链接为了后代,以防万一)。

BEGIN RSA PRIVATE KEY是PKCSBEGIN PRIVATE KEY是PKCS

未加密的PKCS

-----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 密钥,因此不包含密钥类型 OID。BEGIN RSA PRIVATE KEYPKCS#1:

RSA 私钥文件(PKCS

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 (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

来自: stackoverflow.com