RSA私钥文件(PEM-PKCS#8)解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jingcheng345413/article/details/54969327

***此文仅针对没有执行加密的PKCS#8私钥文件***


一、实例解析

PKCS#8格式使用的是ASN.1结构,首先我们对一个没有执行加密的PKCS#8格式私钥文件进行一下解析,方便我们下面分析其结构。

命令:openssl asn1parse -i -in privatekey.pem

结果如下:

  1. 0:d=0  hl=4 l=1213 cons: SEQUENCE
  2. 4:d=1  hl=2 l=   1 prim:  INTEGER           :00
  3. 7:d=1  hl=2 l=  13 cons:  SEQUENCE
  4. 9:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
  5. 20:d=2  hl=2 l=   0 prim:   NULL
  6. 22:d=1  hl=4 l=1191 prim:  OCTET STRING      [HEX DUMP]:308204a3 02010002 82010100 ccae938f 6186eb98 f11cac6b 09a3afb8 69a0b9f3 a7b2f4f4 826e4f32 06fc581d f39cc846 091470d3 96b16c35 317c8d91 bd534f23 59e436ea 555114c7 c89c8794 8a4d6ccf dbc6527b 2598ff3e c953be67 087e7f13 d3a90dad c8fdd44f f886ea23 6a6a1541 fa162934 0b9d7e49 3bba475a 14d55c4e ade38f43 35f5c31d cba0ddf4 280ec8ba 593cb350 58496cff b6f121db c4a71076 d0c56e58 4769cc35 6b72fd1d 2e8a2120 b61a6fd7 ae15f941 4bbf4065 a542c8d6 75df2a3d ae3d8870 32b72708 67f904a8 78300a9c 288d82e6 12320148 ae19c0ca e48cbea1 59f58bbc d5db79a8 a58f671d 9d7c2519 8cbfd67c 82b25d3d 7d3d6f5e f61c5086 d8def686 7a40198f 02030100 01028201 0069e98c 018d7dbb 3b90c83d 8fc59525 c04f2814 10b89e29 92bc4b48 3fa2cdc0 eafebc0a 05f37cd8 45249cfa 592c1a3f 4742a871 32e1b8ed 91a44428 7498a226 a5fe4ac2 1b6ca5da d84e4435 0fd02dbd 40a36c91 65390929 42dbd63c 9e85038a f478841c 2bdfb4c7 ed5e7548 7baca45f 77858042 1b946f44 1a8b3978 955a610b 77f5da22 65dbb3e2 716950f2 16ae97d3 6240129b d165c973 e19e28e5 0caf07dd e5b6cf07 c52f07ba 5f45bcb7 0f43518d cde07043 0c8683bf 9a43df24 fc74eb94 8c190bf6 a97284c0 7ecbc043 dfaac9e8 c6c84d38 f73b189b 20fbac1b 8839d2cd b22cc4ca 714f9415 1bda047a c0fe0ea8 5975728b fbbb1edd f652e296 058469e5 01028181 00f98c64 8f14a540 eb45665d 47ca5efc f761436a 4192d9ab 1ebe8b26 0d1ae811 9026dd35 4e3edc8d 52e65792 74161c76 51c18bd1 943d90ae c60dae31 ac4c7e92 c774ed1d cf26224e 42761f02 cbc382ed 7777b66a 37cda8e5 c4d899b0 8505bf03 b2e60277 b06f12fd 7442ffdb 187da2e4 98ca04d8 91939891 a445982b 2a9d5c79 df028181 00d1f93d 75431192 9a9cdd2d 7e8c0416 904c0a9a 47d49394 092543d7 55a34e21 0406bbd9 4006741b 1cf75cd5 3a51b63a 1bc0f175 8059e1da 1dad8891 8f3932e4 277b787c f10ba690 6b3d2882 65ed807d 13176ff3 514ad3fa 3ef3e21c e430c677 7e180833 522bc5f0 fde3a00f 286839e0 d168104c 0cec6def a46d0ab2 a86bc7b6 51028181 009aaea2 5a6a32b0 d5e4d3b9 b859419d cdfd551b 550020ba 483955e9 45304b6f 2f8a578d c62d82ea 7adb5aa6 e61c1a92 60c4f6d4 f6ed5e74 67416d9b 4eb0afb8 6db8158e 67abbc92 03f251f0 9abb5ab9 b556d814 68f8aadb 99b3a538 5c8c1e45 bdab8316 0ba01e06 4afd88b8 972ab140 bf5061c6 981e03f1 2b01147c 9552ab52 c3028180 583eae74 94be52e5 c5dd329c 878dc449 da9b6e21 981679d5 aa22abe2 22e2d7ff 50312c69 bb0c9ac4 7eb5362b ef616d64 729f47e9 ac5cbe05 51041f60 9902695e aa8685c3 ec489153 707d90e7 f37bd794 e979b441 caf7f1a8 f968630a 07f1b110 7e5b1bee 81d50ba6 383ef17f e2e5c835 59cdd798 6ad8fd29 1666b395 12cef931 02818014 322ac5f2 18b27183 dd4302c2 09b2507b e7cd40b4 51c41ebf 32faa37f 6f2bf375 dc147b55 a2f18b63 2e6b0702 cd48e1b7 89f2e86d 07fb4209 62a9c087 cab67ba3 3e363c3a 4d5f7ab6 0d6c6ad8 8e4044d5 3a38e652 d1d2d7f0 72d4a239 f4d99845 f76a3f6a f843c33b f48619ea 66b97e09 3c2a2ed3 e29529ef e02c8303 709932


ASN.1结构输出格式说明:

d =0   表示节点在整个文件中的偏移长度

hl=4   表示节点头字节长度

l=710 表示节点数据字节长度

cons  表示该节点为结构节点,表示包含子节点或者子结构数据

prim   表示该节点为原始节点,包含数据

OCTET STRING [HEX DUMP],就是我们需要的私钥数据,此数据块遵循PKCS#1密钥数据格式。

SEQUENCE、OCTETSTRING等都是ASN.1中定义的数据类型,具体可以参考ASN.1格式说明。


二、格式定义说明:


为了方便理解,下面给出相关的PKCS定义。

PCKS#8文件格式定义:

  1. PrivateKeyInfo ::SEQUENCE {  
  2.         version                   Version,  
  3.         privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,  
  4.         privateKey                PrivateKey,  
  5.         attributes           [0]  IMPLICIT Attributes OPTIONAL } 
其中:
version,代表版本号
privateKeyAlgorithm使用的私钥算法,详细格式在PKCS#5 2.0中的定义。这里就不详细说明了。
  1. PBES2-params ::SEQUENCE {  
  2.        keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},  
  3.        encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}  
  4.    }  

privateKey,私钥数据,最后一个OCTET STRING数据块,此数据块遵循PKCS#1密钥数据格式。

展开阅读全文

没有更多推荐了,返回首页