PKCS8密钥格式

PKCS #8: Private-Key Information Syntax Standard

所以PKCS #8 跟公钥没啥关系,公钥格式定义可参考相关文档。


以下使用RSA 512

1.生成密钥对

openssl genrsa -out rsa_pem.key 512


2.DER 格式

openssl rsa -in rsa_pem.key -out rsa_der.key -outform DER

---------------------------------------------------------------------

0000 30  13A: SEQUENCE {
0004 02    1:   INTEGER 0
0007 02   41:   INTEGER
            :     00 9F F5 E3 C8 D3 36 C6 BC 0E 33 DC 92 D1 A2 7B
            :     DA BC C1 63 23 1D A3 16 B5 59 14 22 EE E4 DB 16
            :     6D DF 3A C3 AD A2 DD D7 5B 6C E6 A0 02 DF 65 86
            :     E3 1B 21 F2 10 5A 95 8B AA F1 D8 CD 53 31 01 AF
            :     A9
004A 02    3:   INTEGER 65537
004F 02   40:   INTEGER
            :     0C 96 47 BF 54 C7 79 A9 F0 A0 2A 1A 2F 7E CE AA
            :     2E B2 34 FF DD 64 28 F4 4A 37 28 6C 8D FB A3 6F
            :     10 00 6B 10 4C E3 57 7A 9E A5 FA 8E BC 30 4A 07
            :     6C 5F 4D F8 11 B7 89 07 02 D9 B3 22 DB DF 24 01
0091 02   21:   INTEGER
            :     00 D4 57 03 96 15 A3 34 E7 FD 16 7C 07 27 5E F0
            :     CE 73 F9 2C 95 E5 E8 7D 27 52 77 03 74 41 4F E3
            :     29
00B4 02   21:   INTEGER
            :     00 C0 D9 C4 EB D1 F3 48 27 C6 F4 12 13 B5 4B 54
            :     1F 28 30 BF 27 C4 DD C4 78 CE 8E 37 D9 20 BD 78
            :     81
00D7 02   20:   INTEGER
            :     2B 06 22 7C E3 8F 79 25 D4 5B 1C F0 5A 22 DB 8A
            :     09 67 A0 88 12 D8 83 9B 57 13 34 48 F6 FE D7 D9
00F9 02   20:   INTEGER
            :     04 A1 B6 4F 0B 9D D2 2F D2 61 6E 45 B6 E6 F6 40
            :     41 50 DA 66 74 1D F7 68 07 5D F7 0D 69 F1 E3 01
011B 02   21:   INTEGER
            :     00 B1 80 EB 13 C6 88 49 E2 EB BC 28 51 D2 08 1D
            :     54 00 52 52 E5 F9 08 C0 93 84 CD 4D 5F 40 6D E1
            :     72
            :   }


3.PKCS#8 格式

openssl pkcs8 -topk8 -in rsa_pem.key -out pcks8_rsa.key -outform DER -nocrypt

---------------------------------------------------------------------

0000 30  154: SEQUENCE {
0004 02    1:   INTEGER 0
0007 30    D:   SEQUENCE {
0009 06    9:     OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
0014 05    0:     NULL
            :     }
0016 04  13E:   OCTET STRING
            :     30 82 01 3A 02 01 00 02 41 00 9F F5 E3 C8 D3 36
            :     C6 BC 0E 33 DC 92 D1 A2 7B DA BC C1 63 23 1D A3
            :     16 B5 59 14 22 EE E4 DB 16 6D DF 3A C3 AD A2 DD
            :     D7 5B 6C E6 A0 02 DF 65 86 E3 1B 21 F2 10 5A 95
            :     8B AA F1 D8 CD 53 31 01 AF A9 02 03 01 00 01 02
            :     40 0C 96 47 BF 54 C7 79 A9 F0 A0 2A 1A 2F 7E CE
            :     AA 2E B2 34 FF DD 64 28 F4 4A 37 28 6C 8D FB A3
            :     6F 10 00 6B 10 4C E3 57 7A 9E A5 FA 8E BC 30 4A
            :             [ Another 190 bytes skipped ]
            :   }



以下使用ECC 192

1.生成密钥对

openssl ecparam -name secp192r1 -out ec_key.pem -genkey


2.DER 格式

openssl ec -in ec_key.pem -out ec_der.key -outform DER

---------------------------------------------------------------------

0000 30   5F: SEQUENCE {
0002 02    1:   INTEGER 1
0005 04   18:   OCTET STRING
            :     1A 95 B6 FE 96 F6 49 1E 1C C5 91 BD 8B 26 53 F0
            :     7B 3B 0C 2F 50 75 BC 80
001F A0    A:   [0] {
0021 06    8:     OBJECT IDENTIFIER '1 2 840 10045 3 1 1'
            :     }
002B A1   34:   [1] {
002D 03   32:     BIT STRING 0 unused bits
            :       04 6B 79 BB 17 F6 37 35 E5 A8 E6 8F 6C BE 8D B9
            :       AF AD 87 B0 9F 5E BA 6F 45 F3 20 29 AD 15 AC 72
            :       5C 5A 29 EC A3 30 03 AB 70 AA 1A 94 2E F8 5B 12
            :       5B
            :     }
            :   }



3.PKCS#8 格式

openssl pkcs8 -topk8 -in ec_key.pem -out pkcs8_ec.key -outform DER -nocrypt


DER转PKCS8格式
openssl pkcs8 -topk8 -in ec_der.key -inform DER -out pkcs8_ec2.key -outform DER -nocrypt

---------------------------------------------------------------------

0000 30   6F: SEQUENCE {
0002 02    1:   INTEGER 0
0005 30   13:   SEQUENCE {
0007 06    7:     OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
0010 06    8:     OBJECT IDENTIFIER '1 2 840 10045 3 1 1'
            :     }
001A 04   55:   OCTET STRING
            :     30 53 02 01 01 04 18 1A 95 B6 FE 96 F6 49 1E 1C
            :     C5 91 BD 8B 26 53 F0 7B 3B 0C 2F 50 75 BC 80 A1
            :     34 03 32 00 04 6B 79 BB 17 F6 37 35 E5 A8 E6 8F
            :     6C BE 8D B9 AF AD 87 B0 9F 5E BA 6F 45 F3 20 29
            :     AD 15 AC 72 5C 5A 29 EC A3 30 03 AB 70 AA 1A 94
            :     2E F8 5B 12 5B
            :   }


以下提取公钥

导出ECC公钥

openssl ec -in ec_key.pem -pubout -out ec_pub.der -outform DER


导出RSA公钥

openssl rsa -in rsa_pem.key -pubout -out rsa_pub.der -outform DER
默认生成 x509格式的RSA公钥,或者加入-RSAPublicKey_out 输出PKCS1格式


PKCS1转换到X509格式公钥

openssl rsa -in rsa_pub_pkcs1.der -inform DER -pubin -RSAPublicKey_in -pubout -out rsa_pub_x509.der -outform DER


你可能感兴趣的:(PKCS8)