2011-05-03 10 views

Respuesta

38
RSACryptoServiceProvider publicKeyProvider = 
    (RSACryptoServiceProvider)certificate.PublicKey.Key; 

y

RSACryptoServiceProvider privateKeyProvider = 
    (RSACryptoServiceProvider)certificate.PrivateKey; 

La propiedad clave en la propiedad de clave pública o privada del certificado es de tipo AsymmetricAlgorithm.

+0

Gracias blowdart, funcionó como un amuleto. Tal vez debería comprar tu libro. –

+0

Nota: debe ser 'certificate.PrivateKey;' not 'certificate.PrivateKey.Key;' –

+0

Vaya, mi edición incorrecta – blowdart

8

La respuesta de Blowdart es correcta. Sin embargo, para mayor claridad, debo señalar que si desea que su instancia RSACryptoServiceProvider contenga ambas las claves pública y privada del certificado X509 (suponiendo que el certificado tenga una clave privada). Compruebe la propiedad HasPrivateKey del certificado.

RSACryptoServiceProvider rsa; 
if (cert.HasPrivateKey) 
    rsa = (RSACryptoServiceProvider)cert.PrivateKey; 
else 
    rsa = (RSACryptoServiceProvider)cert.PublicKey.Key; 

En el caso de RSA, cuando sólo la clave pública está presente de los parámetros de RSA será único exponente y el módulo, todos los demás serán nulos; Si, por otro lado, la clave privada está presente, los Parámetros RSA contendrán D, DP, DQ, Exponente, Inverso Q, Módulo, P y Q.

+0

(RSACryptoServiceProvider) (c.HasPrivateKey? C.PrivateKey: c.PublicKey.Key); Sin embargo: nunca haría esto. Solo cargaba la clave privada cuando tenía la intención de usar el proveedor para algo * que * requiere * y, por supuesto, no sirve de nada cargar la clave pública. –

Cuestiones relacionadas