阅读ASN.1 DER编码RSA公共密钥
-
16-09-2019 - |
题
我写一个应用程序,以更好地了解DKIM的。该规范说我检索“ASN.1 DER编码”公众从域TXT记录键。我可以看到的键 “s1024._domainkey.yahoo.com”= “+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz QfiWYui / E9UGSXau / 2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm”。
我如何使用从.NET如此重要呢?我见过的例子得到从X509Certificate2键,或含有RSAParameters的XML文件。
<强> CORRECTION 强>:我复制/粘贴的键上方从network-tools.com DNS工具,它一定是剪短。 NSLOOKUP给我的全键:
s1024._domainkey.yahoo.com文本= “K = RSA;吨= Y; P = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui / E9UGSXau2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm” “JiDJOKU3Ns5L4KJAUUHjFwDebt0NP + sBK0VKeTATL2Yr / S3bTxhy + 1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj + XcwIDAQAB; N = A 1024位的密钥;”
因此abelenky是在正确的轨道与BASE64 ..上
解决方案
这是基于64位编码DER编码的ASN.1的的PublicKeyInfo含有RSA公钥。
下面是翻译:
0 30 159: SEQUENCE {
3 30 13: SEQUENCE {
5 06 9: OBJECT IDENTIFIER '1 2 840 113549 1 1 1'
16 05 0: NULL
: }
18 03 141: BIT STRING 0 unused bits, encapsulates {
22 30 137: SEQUENCE {
25 02 129: INTEGER
: 00 EB 11 E7 B4 46 2E 09 BB 3F 90 7E 25 98 BA 2F
: C4 F5 41 92 5D AB BF D8 FF 0B 8E 74 C3 F1 5E 14
: 9E 7F B6 14 06 55 18 4D E4 2F 6D DB CD EA 14 2D
: 8B F8 3D E9 5E 07 78 1F 98 98 83 24 E2 94 DC DB
: 39 2F 82 89 01 45 07 8C 5C 03 79 BB 74 34 FF AC
: 04 AD 15 29 E4 C0 4C BD 98 AF F4 B7 6D 3F F1 87
: 2F B5 C6 D8 F8 46 47 55 ED F5 71 4E 7E 7A 2D BE
: 2E 75 49 F0 BB 12 B8 57 96 F9 3D D3 8A 8F FF 97
: 73
157 02 3: INTEGER 65537
: }
: }
: }
对象标识符表示以下BIT STRING包含RSAPublicKey的编码。整数被模量和公共指数。
可以解码与 Convert.FromBase64String 一个以base64 >,但我不认为.NET已经内置功能解析PublicKeyInfos,所以你需要使用第三方工具,如BouncyCastle的。
其他提示
任何有兴趣在这个问题上,我建议的 System.Security.Cryptography.X509Certificates.PublicKey 强>可用于读取DER编码的公共密钥。
这字符串看起来像其某种基64编码的。 如果转换字符串从基地-64对BLOB,应该然后在有效ASN.1格式。
尝试 BouncyCastle的库,它对于这种情况提供了巨大的功能。