2009-08-15 6 views
3

Ich schreibe eine App, um DKIM besser zu verstehen. Die Spezifikation besagt, dass ich einen "ASN.1 DER-codierten" öffentlichen Schlüssel aus dem Domain-TXT-Datensatz abruft. Ich kann den Schlüssel auf "s1024._domainkey.yahoo.com" = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui/E9UGSXau/2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm" sehen.Lesen eines ASN.1 DER-codierten öffentlichen RSA-Schlüssels

Wie kann ich diesen Schlüssel von .net verwenden? Die Beispiele, die ich gesehen habe, erhalten den Schlüssel von einem X509Certificate2 oder einer XML-Datei, die die RSAParameters enthält.

KORREKTUR: Ich kopiere den Schlüssel oben aus dem Netzwerk-tools.com DNS-Tool, das muss es kurz geschnitten haben. nslookup gibt mir den vollen Schlüssel:

s1024._domainkey.yahoo.com text = "k = rsa; t = y; p = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui/E9UGSXau2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm" „JiDJOKU3Ns5L4KJAUUHjFwDebt0NP + sBK0VKeTATL2Yr/S3bTxhy + 1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj + XcwIDAQAB; n = Ein 1024-Bit-Schlüssel;

So war abelenky auf dem richtigen Weg mit BASE64 ..

+0

Siehe auch: http://unix.stackexchange.com/a/30074/22709 und https://web.archive.org/web/20120124211352/http://blog.oddbit.com/2011/05/ converting-openssh-public-keys.html –

Antwort

10

Dies ist die base64-Codierung der DER-Codierung einer ASN.1 PublicKeyInfo, die einen öffentlichen RSA-Schlüssel enthält. Hier

ist eine Übersetzung:

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 Das zeigt an, dass der folgende BIT STRING die Codierung eines RSAPublicKey enthält. Die INTEGER sind der Modul und der öffentliche Exponent.

Sie können die base64 mit Convert.FromBase64String dekodieren, aber ich glaube nicht, dass .NET integrierte Funktionalität zum Parsen von PublicKeyInfos hat, also müssen Sie ein Tool von Drittanbietern wie BouncyCastle verwenden.

+0

der Schlüssel wurde kurz geschnitten .. Ich habe die Frage mit der vollen aktualisiert Schlüssel. das macht jetzt viel mehr Sinn, danke. – russau

2

Das Zeichenfolge wie seine irgendeine Art von Basis-64-Codierung aussieht. Wenn Sie diese Zeichenfolge von Base-64 in ein BLOB konvertieren, sollte es im gültigen ASN.1-Format vorliegen.

+0

Ich habe versucht, es von BASE64 konvertieren - kein Glück. Dieser Beitrag schlägt vor, DER-codiert ist etwas ähnliches? http://stackoverflow.com/questions/657989/identifying-whether-a-certificate-is-der-encoded-or-base-64-encoded – russau

1

Probieren Sie die bouncycastle-Bibliothek, es bietet große Funktionalität für solche Fälle.