2009-08-15 12 views
3

DKIM에 대해 더 잘 이해하기 위해 앱을 작성하고 있습니다. 사양에 따르면 도메인 TXT 레코드에서 "ASN.1 DER로 인코딩 된"공용 키를 검색합니다. "s1024._domainkey.yahoo.com"= "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz + QfiWYui/E9UGSXau/2P8LjnTD8V4Unn + 2FAZVGE3kL23bzeoULYv4PeleB3gfm"의 키를 볼 수 있습니다.ASN.1 DER로 인코딩 된 RSA 공개 키 읽기

어떻게이 키를 .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는

+0

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

답변

10

이것은 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 
      :   } 
      :  } 
      : } 

오브젝트 ID가 다음 비트 열이 RSAPublicKey의 인코딩을 포함 함을 나타낸다 : 여기

는 번역이다. INTEGER는 계수 (modulus)와 공개 지수입니다.

으로 base64를 디코딩 할 수 있지만 .NET에 PublicKeyInfos를 파싱하는 기능이 내장되어 있지 않으므로 BouncyCastle과 같은 타사 도구를 사용해야합니다.

+0

키가 짧게 잘 렸습니다. 전체 질문으로 업데이트했습니다. 키. 덕분에 지금은 훨씬 더 의미가 있습니다. – russau

2

그 문자열이 기본-64 인코딩의 일종처럼 보이는 .. BASE64 함께 궤도에 있었다. 해당 문자열을 base-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 라이브러리를 사용해보십시오. 그런 경우에 훌륭한 기능을 제공합니다.

관련 문제