the read provided only must half example create also c# .net cryptography certificate rsacryptoserviceprovider

read - x509certificate2 c# example



¿La mejor manera de iniciar RSACryptoServiceProvider desde x509Certificate2? (3)

¿Cuál es la mejor manera de iniciar un nuevo objeto RSACryptoServiceProvider desde un X509Certificate2 que saqué de un almacén de claves? El certificado está asociado con las claves públicas (para el cifrado) y privadas (para el descifrado).

FromXmlString estoy usando el método FromXmlString , pero debe haber una mejor manera.

Gracias


La respuesta de Blowdart es ciertamente correcta. Sin embargo, para mayor claridad, debo señalar que si desea que su instancia RSACryptoServiceProvider contenga 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 solo está presente la clave pública, los Parámetros de RSA serán solo Exponent y 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, Exponent, InverseQ, Módulo, P y Q.


La forma recomendada es usar la clase base RSA y llamar a certificate.GetRSAPrivateKey() .

RSA publicKeyProvider = certificate.GetRSAPrivateKey();

Desde .NET 4.6, ya no se recomienda la conversión a RSACryptoServiceProvider como lo sugiere @blowdart. Esto es aún más un problema ya que hay varias versiones de .NET (como .NET Core).

Al realizar la conversión a RSACryptoServiceProvider esa forma, es muy RSACryptoServiceProvider que obtenga esta excepción de conversión (según la plataforma y las bibliotecas utilizadas):

No se puede convertir el objeto de tipo ''System.Security.Cryptography.RSACng'' para escribir ''System.Security.Cryptography.RSACryptoServiceProvider''

La razón es que la implementación real podría ser diferente de cada plataforma, en Windows RSACng se utiliza.

Aquí hay un enlace que describe este problema (busque la respuesta de Jeremy Barton).


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

y

RSACryptoServiceProvider privateKeyProvider = (RSACryptoServiceProvider)certificate.PrivateKey;

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