如何从ASN1 DER格式私钥中获取字段?是否有一个库可以解码并单独获取字段?
我需要提取模数,指数和所有其他字段。
或者有没有办法将其转换为.net xml格式?
答案 0 :(得分:3)
如果你想要的只是减少解析ASN.1所需的代码,你可以看一下ASN.1 Editor project的LCLib部分。
这是一个简单的ASN.1处理器库。
使用样本DER编码的测试字符串“test1@rsa.com”:
16 0d 74 65 73 74 31 40 72 73 61 2e 63 6f 6d
using (var stm = new MemoryStream(new byte[] { 0x16, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x31, 0x40, 0x72, 0x73, 0x61, 0x2e, 0x63, 0x6f, 0x6d }))
{
Asn1Parser parser = new Asn1Parser();
parser.LoadData(stm);
var decoded = parser.ToString();
}
提供格式化输出:
胶印| Len | LenByte | ====== + ====== + ======= + ====
0| 13| 1| IA5 STRING : 'test1@rsa.com'
您可以走树,并根据需要处理节点。
答案 1 :(得分:1)
通常的private key来自PEM DER ASN.1:
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC7dTxHvzZoEKZj
ZJiYM2xL0oarJyLWItVmBg6UMNJ/OKYZ83++kCQIwTM8MLB8FBBC+qzGO8755IRN
uXodpzXucXy1+83UkmRwYV97FvGxEUuZ/fkOad0Y6UiIQ1mSRWhh0teGcXdG8LKC
v8HsrSChjnA2oZvzGiqlT5OfNdyecltZy8FOyeHrStM+4MD9V20K2Gp7V7s8swTS
MFiv0iTvuPgk0VxoJC8H5yWQ/qQpFC2Mf//S33MoMpsDA6/jLi6SnMenEiIp9ZdW
rLt2R/fXHv7FAolhoQ8Y6uVNMv3smvMCL3js8vT4g4UJhPZq6dhFt6t5aYsxXYUS
Hp4FAcSfAgMBAAECggEAdrN+z0PCVNUuN0Ps6HuveLe/tMMcaRI3pNnzA12C/TJG
46nv2yB04OJN6jA+oOMnhPIs033tywkryffH3t0R5oIQYUAojxF/7jWKe2wE8YWt
JL7QpZLdgTe/SSG0p02yEjeraCOTTuV9dBOu3YqnXgXPApkFIkQQewtPxAIcSGu0
tsX5pAM3aojkSwgXzHAKN03CX5ubYkRMsMlx/10/gNB4x2OVdPAS5Cfvzf1vQIlq
EyWnrGnazQ6AVibb9ZHZjjcW+HB9C/xr0xXOXs3fok/vpRY9h6b4bHu2N/4735p1
A/TPdnst8F1hpIAmeLrnTKVQFiQYOMUyLavTI+WziQKBgQDxU2fqghM9VIlNEu5q
oCR7Vj8xh1su0HOBdvLyhNVwuGgoQ79BmyDmQqEruaUTxAFkorCJHAlO7yTLN6Z5
poHjPiGmeSuPeBKriUn5CfsWU0L5+1BRXw+Qvm2CUJO4TOOaZg60uxiuObwbSlVp
EBZ5pgD2CW2amabAuM/N2m9sXQKBgQDG20voWzCBYPfUTnPgpbVWMxvhUQZbZNEN
7qyDZaBercUCr7yE9otTjWKGhyEGePH5qX1gVVKYn3kahpF0dyeW+laQ2z3lWRbo
LZWuJ5pQwZ5Bt5qNJx2TIilTcXT1+Rm0RqqLYl3RV86WXdyLbkxe9B/FiQdIM/4J
JPcjBxPFKwKBgC4d7kHWUa7qtMJR19XwfIhFVxYz86zikPAwtwS5dcBwvRbUu3vi
FUtreDlO5Mj+L/X3UR0iinTXJoTfQaUFuNSgTvXtOfHU1FyLg+NfkOgXSTlUWWjz
bZoPigXZOCGEMAqVbkIDbxf8WIIullvZgzIEEzLxYkylCETUDIIeOCTRAoGBAIns
Kg7jyJXDusB/FXH3nPlHg4vYVc9n8nN2WiLchsmEPsOpPdj+4w21X2OtL6O8mSAv
hS0eoKYI3ccfFJ2x0zytLwNTfO+oxfGNRGbBQw/F6szr2n8SZTnalM0yQQwllMVr
yffY5vc+rqOuQDxY6RFmwu6QJwPWQ9j10Y9y5ix3AoGBAK/PItwpdbbj2G6BJedC
gB/Ka7H6kr7xjEbWvjXA9zTzSnS9CxsqVOyWdREijOGdgkkk3wFB4oRco8ZIlcr0
HjelRI6aHpoBdXIHriyxXbNSbXh8JMp8ljmBu5Kqr2xUjQsOTelX5x/VWvqmyI8M
TFkz6p1QYUPyqTxfZvudsrsO
-----END PRIVATE KEY-----
BEGIN PRIVATE KEY 标题告诉您这将是 PrivateKeyInfo 格式的数据。
PrivateKeyInfo ::= SEQUENCE {
version Version,
privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
privateKey PrivateKey,
attributes [0] IMPLICIT Attributes OPTIONAL
}
PrivateKeyAlgorithmIdentifier
告诉您要遵循哪种私钥(例如EC,RSA,DH)。在RSA的情况下,算法ID是
1.2.840.113549.1.1.1
:rsaEncryption(PKCS#1)这意味着它具有以下结构:
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
}
数据是base64编码的,我们可以解码:
30 82 04 be 02 01 00 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 04 82 04 a8 30 82 04 a4 02 01 00 02 82 01 01 00 bb 75 3c 47 bf 36 68 10 a6 63 64 98 98 33 6c 4b d2 86 ab 27 22 d6 22 d5 66 06 0e 94 30 d2 7f 38 a6 19 f3 7f be 90 24 08 c1 33 3c 30 b0 7c 14 10 42 fa ac c6 3b ce f9 e4 84 4d b9 7a 1d a7 35 ee 71 7c b5 fb cd d4 92 64 70 61 5f 7b 16 f1 b1 11 4b 99 fd f9 0e 69 dd 18 e9 48 88 43 59 92 45 68 61 d2 d7 86 71 77 46 f0 b2 82 bf c1 ec ad 20 a1 8e 70 36 a1 9b f3 1a 2a a5 4f 93 9f 35 dc 9e 72 5b 59 cb c1 4e c9 e1 eb 4a d3 3e e0 c0 fd 57 6d 0a d8 6a 7b 57 bb 3c b3 04 d2 30 58 af d2 24 ef b8 f8 24 d1 5c 68 24 2f 07 e7 25 90 fe a4 29 14 2d 8c 7f ff d2 df 73 28 32 9b 03 03 af e3 2e 2e 92 9c c7 a7 12 22 29 f5 97 56 ac bb 76 47 f7 d7 1e fe c5 02 89 61 a1 0f 18 ea e5 4d 32 fd ec 9a f3 02 2f 78 ec f2 f4 f8 83 85 09 84 f6 6a e9 d8 45 b7 ab 79 69 8b 31 5d 85 12 1e 9e 05 01 c4 9f 02 03 01 00 01 02 82 01 00 76 b3 7e cf 43 c2 54 d5 2e 37 43 ec e8 7b af 78 b7 bf b4 c3 1c 69 12 37 a4 d9 f3 03 5d 82 fd 32 46 e3 a9 ef db 20 74 e0 e2 4d ea 30 3e a0 e3 27 84 f2 2c d3 7d ed cb 09 2b c9 f7 c7 de dd 11 e6 82 10 61 40 28 8f 11 7f ee 35 8a 7b 6c 04 f1 85 ad 24 be d0 a5 92 dd 81 37 bf 49 21 b4 a7 4d b2 12 37 ab 68 23 93 4e e5 7d 74 13 ae dd 8a a7 5e 05 cf 02 99 05 22 44 10 7b 0b 4f c4 02 1c 48 6b b4 b6 c5 f9 a4 03 37 6a 88 e4 4b 08 17 cc 70 0a 37 4d c2 5f 9b 9b 62 44 4c b0 c9 71 ff 5d 3f 80 d0 78 c7 63 95 74 f0 12 e4 27 ef cd fd 6f 40 89 6a 13 25 a7 ac 69 da cd 0e 80 56 26 db f5 91 d9 8e 37 16 f8 70 7d 0b fc 6b d3 15 ce 5e cd df a2 4f ef a5 16 3d 87 a6 f8 6c 7b b6 37 fe 3b df 9a 75 03 f4 cf 76 7b 2d f0 5d 61 a4 80 26 78 ba e7 4c a5 50 16 24 18 38 c5 32 2d ab d3 23 e5 b3 89 02 81 81 00 f1 53 67 ea 82 13 3d 54 89 4d 12 ee 6a a0 24 7b 56 3f 31 87 5b 2e d0 73 81 76 f2 f2 84 d5 70 b8 68 28 43 bf 41 9b 20 e6 42 a1 2b b9 a5 13 c4 01 64 a2 b0 89 1c 09 4e ef 24 cb 37 a6 79 a6 81 e3 3e 21 a6 79 2b 8f 78 12 ab 89 49 f9 09 fb 16 53 42 f9 fb 50 51 5f 0f 90 be 6d 82 50 93 b8 4c e3 9a 66 0e b4 bb 18 ae 39 bc 1b 4a 55 69 10 16 79 a6 00 f6 09 6d 9a 99 a6 c0 b8 cf cd da 6f 6c 5d 02 81 81 00 c6 db 4b e8 5b 30 81 60 f7 d4 4e 73 e0 a5 b5 56 33 1b e1 51 06 5b 64 d1 0d ee ac 83 65 a0 5e ad c5 02 af bc 84 f6 8b 53 8d 62 86 87 21 06 78 f1 f9 a9 7d 60 55 52 98 9f 79 1a 86 91 74 77 27 96 fa 56 90 db 3d e5 59 16 e8 2d 95 ae 27 9a 50 c1 9e 41 b7 9a 8d 27 1d 93 22 29 53 71 74 f5 f9 19 b4 46 aa 8b 62 5d d1 57 ce 96 5d dc 8b 6e 4c 5e f4 1f c5 89 07 48 33 fe 09 24 f7 23 07 13 c5 2b 02 81 80 2e 1d ee 41 d6 51 ae ea b4 c2 51 d7 d5 f0 7c 88 45 57 16 33 f3 ac e2 90 f0 30 b7 04 b9 75 c0 70 bd 16 d4 bb 7b e2 15 4b 6b 78 39 4e e4 c8 fe 2f f5 f7 51 1d 22 8a 74 d7 26 84 df 41 a5 05 b8 d4 a0 4e f5 ed 39 f1 d4 d4 5c 8b 83 e3 5f 90 e8 17 49 39 54 59 68 f3 6d 9a 0f 8a 05 d9 38 21 84 30 0a 95 6e 42 03 6f 17 fc 58 82 2e 96 5b d9 83 32 04 13 32 f1 62 4c a5 08 44 d4 0c 82 1e 38 24 d1 02 81 81 00 89 ec 2a 0e e3 c8 95 c3 ba c0 7f 15 71 f7 9c f9 47 83 8b d8 55 cf 67 f2 73 76 5a 22 dc 86 c9 84 3e c3 a9 3d d8 fe e3 0d b5 5f 63 ad 2f a3 bc 99 20 2f 85 2d 1e a0 a6 08 dd c7 1f 14 9d b1 d3 3c ad 2f 03 53 7c ef a8 c5 f1 8d 44 66 c1 43 0f c5 ea cc eb da 7f 12 65 39 da 94 cd 32 41 0c 25 94 c5 6b c9 f7 d8 e6 f7 3e ae a3 ae 40 3c 58 e9 11 66 c2 ee 90 27 03 d6 43 d8 f5 d1 8f 72 e6 2c 77 02 81 81 00 af cf 22 dc 29 75 b6 e3 d8 6e 81 25 e7 42 80 1f ca 6b b1 fa 92 be f1 8c 46 d6 be 35 c0 f7 34 f3 4a 74 bd 0b 1b 2a 54 ec 96 75 11 22 8c e1 9d 82 49 24 df 01 41 e2 84 5c a3 c6 48 95 ca f4 1e 37 a5 44 8e 9a 1e 9a 01 75 72 07 ae 2c b1 5d b3 52 6d 78 7c 24 ca 7c 96 39 81 bb 92 aa af 6c 54 8d 0b 0e 4d e9 57 e7 1f d5 5a fa a6 c8 8f 0c 4c 59 33 ea 9d 50 61 43 f2 a9 3c 5f 66 fb 9d b2 bb 0e
知道它是DER ASN.1,我们可以开始解码:
30 82 04 be
02 01
Version
:0 00
30 0d
PrivateKeyAlgorithmIdentifier
:1.2.840.113549.1.1.1 06 09 2a 86 48 86 f7 0d 01 01 01
05 00
04 82 04 a8
30 82 04 a4
02 01
Version
:0 00
02 82 01 01
modulus
00 bb 75 3c 47 bf 36 68 10 a6 63 64 98 98 33 6c 4b d2 86 ab 27 22 d6 22 d5 66 06 0e 94 30 d2 7f 38 a6 19 f3 7f be 90 24 08 c1 33 3c 30 b0 7c 14 10 42 fa ac c6 3b ce f9 e4 84 4d b9 7a 1d a7 35 ee 71 7c b5 fb cd d4 92 64 70 61 5f 7b 16 f1 b1 11 4b 99 fd f9 0e 69 dd 18 e9 48 88 43 59 92 45 68 61 d2 d7 86 71 77 46 f0 b2 82 bf c1 ec ad 20 a1 8e 70 36 a1 9b f3 1a 2a a5 4f 93 9f 35 dc 9e 72 5b 59 cb c1 4e c9 e1 eb 4a d3 3e e0 c0 fd 57 6d 0a d8 6a 7b 57 bb 3c b3 04 d2 30 58 af d2 24 ef b8 f8 24 d1 5c 68 24 2f 07 e7 25 90 fe a4 29 14 2d 8c 7f ff d2 df 73 28 32 9b 03 03 af e3 2e 2e 92 9c c7 a7 12 22 29 f5 97 56 ac bb 76 47 f7 d7 1e fe c5 02 89 61 a1 0f 18 ea e5 4d 32 fd ec 9a f3 02 2f 78 ec f2 f4 f8 83 85 09 84 f6 6a e9 d8 45 b7 ab 79 69 8b 31 5d 85 12 1e 9e 05 01 c4 9f
02 03
publicExponent
:01 00 01
02 82 01 00
privateExponent
:76 b3 7e cf 43 c2 54 d5 2e 37 43 ec e8 7b af 78 b7 bf b4 c3 1c 69 12 37 a4 d9 f3 03 5d 82 fd 32 46 e3 a9 ef db 20 74 e0 e2 4d ea 30 3e a0 e3 27 84 f2 2c d3 7d ed cb 09 2b c9 f7 c7 de dd 11 e6 82 10 61 40 28 8f 11 7f ee 35 8a 7b 6c 04 f1 85 ad 24 be d0 a5 92 dd 81 37 bf 49 21 b4 a7 4d b2 12 37 ab 68 23 93 4e e5 7d 74 13 ae dd 8a a7 5e 05 cf 02 99 05 22 44 10 7b 0b 4f c4 02 1c 48 6b b4 b6 c5 f9 a4 03 37 6a 88 e4 4b 08 17 cc 70 0a 37 4d c2 5f 9b 9b 62 44 4c b0 c9 71 ff 5d 3f 80 d0 78 c7 63 95 74 f0 12 e4 27 ef cd fd 6f 40 89 6a 13 25 a7 ac 69 da cd 0e 80 56 26 db f5 91 d9 8e 37 16 f8 70 7d 0b fc 6b d3 15 ce 5e cd df a2 4f ef a5 16 3d 87 a6 f8 6c 7b b6 37 fe 3b df 9a 75 03 f4 cf 76 7b 2d f0 5d 61 a4 80 26 78 ba e7 4c a5 50 16 24 18 38 c5 32 2d ab d3 23 e5 b3 89
02 81 81
prime1
:00 f1 53 67 ea 82 13 3d 54 89 4d 12 ee 6a a0 24 7b 56 3f 31 87 5b 2e d0 73 81 76 f2 f2 84 d5 70 b8 68 28 43 bf 41 9b 20 e6 42 a1 2b b9 a5 13 c4 01 64 a2 b0 89 1c 09 4e ef 24 cb 37 a6 79 a6 81 e3 3e 21 a6 79 2b 8f 78 12 ab 89 49 f9 09 fb 16 53 42 f9 fb 50 51 5f 0f 90 be 6d 82 50 93 b8 4c e3 9a 66 0e b4 bb 18 ae 39 bc 1b 4a 55 69 10 16 79 a6 00 f6 09 6d 9a 99 a6 c0 b8 cf cd da 6f 6c 5d
02 81 81
prime2
:00 c6 db 4b e8 5b 30 81 60 f7 d4 4e 73 e0 a5 b5 56 33 1b e1 51 06 5b 64 d1 0d ee ac 83 65 a0 5e ad c5 02 af bc 84 f6 8b 53 8d 62 86 87 21 06 78 f1 f9 a9 7d 60 55 52 98 9f 79 1a 86 91 74 77 27 96 fa 56 90 db 3d e5 59 16 e8 2d 95 ae 27 9a 50 c1 9e 41 b7 9a 8d 27 1d 93 22 29 53 71 74 f5 f9 19 b4 46 aa 8b 62 5d d1 57 ce 96 5d dc 8b 6e 4c 5e f4 1f c5 89 07 48 33 fe 09 24 f7 23 07 13 c5 2b
02 81 80
exponent1
:2e 1d ee 41 d6 51 ae ea b4 c2 51 d7 d5 f0 7c 88 45 57 16 33 f3 ac e2 90 f0 30 b7 04 b9 75 c0 70 bd 16 d4 bb 7b e2 15 4b 6b 78 39 4e e4 c8 fe 2f f5 f7 51 1d 22 8a 74 d7 26 84 df 41 a5 05 b8 d4 a0 4e f5 ed 39 f1 d4 d4 5c 8b 83 e3 5f 90 e8 17 49 39 54 59 68 f3 6d 9a 0f 8a 05 d9 38 21 84 30 0a 95 6e 42 03 6f 17 fc 58 82 2e 96 5b d9 83 32 04 13 32 f1 62 4c a5 08 44 d4 0c 82 1e 38 24 d1
02 81 81
exponent2
:00 89 ec 2a 0e e3 c8 95 c3 ba c0 7f 15 71 f7 9c f9 47 83 8b d8 55 cf 67 f2 73 76 5a 22 dc 86 c9 84 3e c3 a9 3d d8 fe e3 0d b5 5f 63 ad 2f a3 bc 99 20 2f 85 2d 1e a0 a6 08 dd c7 1f 14 9d b1 d3 3c ad 2f 03 53 7c ef a8 c5 f1 8d 44 66 c1 43 0f c5 ea cc eb da 7f 12 65 39 da 94 cd 32 41 0c 25 94 c5 6b c9 f7 d8 e6 f7 3e ae a3 ae 40 3c 58 e9 11 66 c2 ee 90 27 03 d6 43 d8 f5 d1 8f 72 e6 2c 77
02 81 81
coefficient
:00 af cf 22 dc 29 75 b6 e3 d8 6e 81 25 e7 42 80 1f ca 6b b1 fa 92 be f1 8c 46 d6 be 35 c0 f7 34 f3 4a 74 bd 0b 1b 2a 54 ec 96 75 11 22 8c e1 9d 82 49 24 df 01 41 e2 84 5c a3 c6 48 95 ca f4 1e 37 a5 44 8e 9a 1e 9a 01 75 72 07 ae 2c b1 5d b3 52 6d 78 7c 24 ca 7c 96 39 81 bb 92 aa af 6c 54 8d 0b 0e 4d e9 57 e7 1f d5 5a fa a6 c8 8f 0c 4c 59 33 ea 9d 50 61 43 f2 a9 3c 5f 66 fb 9d b2 bb 0e
因此,您拥有最终的RSA私钥值:
version: 0
modulus: 236643739934412948903373669476774126683629718702123314074863910669092…
publicExponent: 65,537
privateExponent: 149846324420376321261899444735289218048490924156116627413411926527864…
prime1: 169464742892393599674909179163866779357332259972872392530945213283668…
prime2: 139641872341951706778976733766729896659299032766950485174897609653257…
exponent1: 323844002622081792320149314104745036341490947693707957956201512300634…
exponent2: 968524849673225022756364715102416566618618114106799869329534590657009…
coefficient: 123457366510080958921249047966574081489759226696746456882235437625391…
答案 2 :(得分:0)
我找到了答案,我使用了这个实用程序中的代码: http://www.jensign.com/opensslkey/
源代码:OpenSSLKey