2009-08-15 4 views
3

Я пишу приложение, чтобы лучше понять DKIM. Спецификация говорит, что я извлекаю открытый ключ ASN.1 DER-encoded из записи TXT домена. Я могу видеть ключ на «s1024._domainkey.yahoo.com» = «MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui/E9UGSXau/2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm».Чтение ASN.1 DER-закодированный открытый ключ RSA

Как использовать этот ключ из .net? Примеры, которые я видел, получают ключ от X509Certificate2 или XML-файл, содержащий RSAP-параметры.

КОРРЕКЦИЯ: Я скопировал/вставлял ключ из ключа network-tools.com DNS, который должен был его сократить. Nslookup дает мне полный ключ:

s1024._domainkey.yahoo.com текст = "к = ПДС, т = у, р = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui/E9UGSXau2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm" «JiDJOKU3Ns5L4KJAUUHjFwDebt0NP + sBK0VKeTATL2Yr/S3bTxhy + 1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj + XcwIDAQAB; n = 1024 бит ключа; "

Так abelenky был на правильном пути с BASE64 ..

+0

См. Также: http://unix.stackexchange.com/a/30074/22709 и https://web.archive.org/web/20120124211352/http://blog.oddbit.com/2011/05/ convertting-openssh-public-keys.html –

ответ

10

Это base64-кодировка 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 
      :   } 
      :  } 
      : } 

Идентификатор объекта указывает на то, что следующий битовая строка содержит кодирование с RSAPublicKey. INTEGER являются модулем и общественным показателем.

Вы можете декодировать base64 с Convert.FromBase64String, но я не думаю, что .NET имеет встроенные функции для разбора PublicKeyInfos, поэтому вам нужно использовать сторонний инструмент, такой как BouncyCastle.

+0

ключ был прерван .. я обновил вопрос с полным ключ. спасибо, спасибо. – russau

2

Эта строка выглядит как-то его рода база-64 кодировке. Если вы преобразуете эту строку из базы-64 в BLOB, она должна быть в правильном формате ASN.1.

+0

Я пробовал преобразовать его с BASE64 - не повезло. Этот пост предлагает DER-кодирование, что-то подобное? http://stackoverflow.com/questions/657989/identifying-whether-a-certificate-is-der-encoded-or-base-64-encoded – russau

1

Пробуйте библиотеку bouncycastle, она обеспечивает отличную функциональность для таких случаев.

 Смежные вопросы

  • Нет связанных вопросов^_^