O que é necessário para converter dados ASN.1 em uma chave pública? por exemplo. Como eu determino o OID?

Este código está relacionadoVerificação de assinatura DKIM usado em esforços anti-spam.

eu tenho umbyte[] des1024._domainkey.yahoo.com que é ASN.1 codificado, mas eu não sei se isso sozinho contém informações suficientes para materializar uma chave pública.

Baseado emesta aula, parece que posso converter uma chave ASN.1 em uma chave pública X509Certificate, mas preciso fornecer um OID e alguns parâmetros codificados em ASN.1.

Neste exemplo eu tenho metadados que a chave ASN1 é:

Uma chave codificada RSA (ASN.1 DER codificada [ITU-X660-1997] RSAPublicKey por RFC3447)Usado com algoritmos de hash sha1 sha256Usa um OID relacionado à tabela a seguir da seção A.2 da RFC3447 (embora eu não saiba como transformar essas informações em um OID completo)
/*
 * 1.2.840.113549.1
 * 
    MD2 md2WithRSAEncryption    ::= {pkcs-1 2}
    MD5 md5WithRSAEncryption    ::= {pkcs-1 4}
    SHA-1 sha1WithRSAEncryption   ::= {pkcs-1 5}
    SHA-256 sha256WithRSAEncryption ::= {pkcs-1 11}
    SHA-384 sha384WithRSAEncryption ::= {pkcs-1 12}
    SHA-512 sha512WithRSAEncryption ::= {pkcs-1 13}
 */

Amostra de código

string pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB";
byte[] pubkeyByteArray = Convert.FromBase64String(pubkey);
AsnEncodedData aData = new AsnEncodedData(pubkeyByteArray);

// OID must not be null, but it is here.  What is it?
System.Security.Cryptography.X509Certificates.PublicKey pubKeyRdr = new System.Security.Cryptography.X509Certificates.PublicKey(aData.Oid, null, aData);

Questão

Qual OID devo usar?Quais são os exemplos de parâmetros ASN.1?

questionAnswers(2)

yourAnswerToTheQuestion