【问题标题】:Reading a ASN.1 DER-encoded RSA Public key读取 ASN.1 DER 编码的 RSA 公钥
【发布时间】:2010-11-19 20:20:28
【问题描述】:

我正在编写一个应用程序来更好地了解 DKIM。规范说我从域 TXT 记录中检索“ASN.1 DER 编码”公钥。我可以在 "s1024._domainkey.yahoo.com" = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm" 上看到密钥。

如何从 .net 使用此密钥?我看到的示例从 X509Certificate2 或包含 RSAParameters 的 XML 文件中获取密钥。

更正:我从 network-tools.com DNS 工具复制/粘贴了上面的密钥,它一定是缩短了它。 nslookup 给了我完整的密钥:

s1024._domainkey.yahoo.com 文本 = “k=rsa;t=y;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm” "JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bTxhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj+XcwIDAQAB;n=1024 位密钥;"

所以 abelenky 在 BASE64 上走在了正确的轨道上..

【问题讨论】:

标签: c# cryptography rsa asn.1


【解决方案1】:

对于任何对此感兴趣的人,我建议使用 System.Security.Cryptography.X509Certificates.PublicKey,它可用于读取 DER 编码的公钥。

【讨论】:

    【解决方案2】:

    试试bouncycastle 库,它为这种情况提供了强大的功能。

    【讨论】:

      【解决方案3】:

      这是包含 RSA 公钥的 ASN.1 PublicKeyInfo 的 DER 编码的 base64 编码。

      这是翻译:

         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
                  :         }
                  :       }
                  :   }
      

      OBJECT IDENTIFIER 表示后面的 BIT STRING 包含 RSAPublicKey 的编码。 INTEGER 是模数和公共指数。

      您可以使用Convert.FromBase64String 解码 base64,但我认为 .NET 没有用于解析 PublicKeyInfos 的内置功能,因此您需要使用像 BouncyCastle 这样的第 3 方工具。

      【讨论】:

      • 钥匙被剪短了。我已经用完整的钥匙更新了这个问题。这现在确实更有意义了,谢谢。
      【解决方案4】:

      该字符串看起来像是某种 base-64 编码。 如果将该字符串从 base-64 转换为 BLOB,那么它应该是有效的 ASN.1 格式。

      【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2021-06-22
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2022-01-22
      • 2012-05-09
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多