Считывание открытого ключа RSA в кодировке ASN.1 DER в кодировке RSA

StackOverflow https://stackoverflow.com/questions/1281102

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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

ИСПРАВЛЕНИЕ:Я скопировал / вставил приведенный выше ключ из инструмента network-tools.com DNS, который, должно быть, сократил его.nslookup дает мне полный ключ:

s1024._domainkey.yahoo.com text = "k=rsa;t=y;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm" "JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bTxhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj+XcwIDAQAB;n=1024-битный ключ;"

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

Это было полезно?

Решение

Это кодировка 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.Целые числа - это модуль и открытый показатель.

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

Другие советы

Для всех, кто интересуется этим вопросом, я бы предложил следующее Система.Безопасность.Криптография.x509сертифицирует.Публичный ключ который может быть использован для считывания открытого ключа, закодированного в DER.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top