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