Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

738
Vistas
Claves de C# BouncyCastle FIPS RSA para RSACryptoServiceProvider

BouncyCastle tiene archivos DLL FIPS para C# que necesito usar para el cifrado en lugar de archivos DLL normales debido al cumplimiento. ¿Cómo importa claves públicas y privadas y las convierte en un RSACryptoServiceProvider para cifrar y descifrar?


Así es como encripto y descifro usando el BouncyCastle normal. Solo necesito cambiar las funciones ImportPrivateKey e ImportPublicKey

 public static string Decrypt(string privateKey, string base64Encrypted) { string ret = null; using (var rsa = ImportPrivateKey(privateKey)) { var cipherBytes = Convert.FromBase64String(base64Encrypted); RSA rsaCng = new RSACng(); rsaCng.ImportParameters(rsa.ExportParameters(true)); byte[] plainBytes = rsaCng.Decrypt(cipherBytes, RSAEncryptionPadding.OaepSHA256); string plaintext = Encoding.UTF8.GetString(plainBytes); ret = plaintext; } return ret; }
 public static string Encrypt(string publicKey, string toEncrypt) { string cipherText = null; using (var rsa = ImportPublicKey(publicKey)) { var data = Encoding.UTF8.GetBytes(toEncrypt); RSA rsaCng = new RSACng(); rsaCng.ImportParameters(rsa.ExportParameters(false)); byte[] cipherTextBytes = rsaCng.Encrypt(data, RSAEncryptionPadding.OaepSHA256); cipherText = Convert.ToBase64String(cipherTextBytes); } return cipherText; }
 public RSACryptoServiceProvider ImportPrivateKey(string pem) { PemReader pr = new PemReader(new StringReader(pem)); AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject(); RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(rsaParams); return rsa; }
 public RSACryptoServiceProvider ImportPublicKey(string pem) { PemReader pr = new PemReader(new StringReader(pem)); AsymmetricKeyParameter publicKey = (AsymmetricKeyParameter)pr.ReadObject(); RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaKeyParameters)publicKey); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(rsaParams); return rsa; }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Así es como lo hice funcionar. Si alguien más tiene algo más simple, ¡sería increíble!. Importe las claves, conviértalas en AsymmetricRsaPublicKey , luego conviértalas en RSAParameters y luego impórtelos.

 using System.IO; using System.Security.Cryptography; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Crypto.Asymmetric; using Org.BouncyCastle.Crypto.Fips; using Org.BouncyCastle.OpenSsl;
 public RSACryptoServiceProvider ImportPublicKey(string key) { var reader = new OpenSslPemReader(new StringReader(key)); var publicKeyInfo = (SubjectPublicKeyInfo)reader.ReadObject(); var rpckp = new AsymmetricRsaPublicKey(FipsRsa.Pkcs1v15.Algorithm, publicKeyInfo); RSAParameters parms = new RSAParameters { Modulus = rpckp.Modulus.ToByteArrayUnsigned(), Exponent = rpckp.PublicExponent.ToByteArrayUnsigned() }; RSACryptoServiceProvider rcsp = new RSACryptoServiceProvider(); rcsp.ImportParameters(parms); return rcsp; }
 public RSACryptoServiceProvider ImportPrivateKey(string key) { var reader = new OpenSslPemReader(new StringReader(key)); var keyPair = (PemKeyPair)reader.ReadObject(); var rpckp = new AsymmetricRsaPrivateKey(FipsRsa.Pkcs1v15.Algorithm, keyPair.PrivateKeyInfo); RSAParameters parms = new RSAParameters { Modulus = rpckp.Modulus.ToByteArrayUnsigned(), P = rpckp.P.ToByteArrayUnsigned(), Q = rpckp.Q.ToByteArrayUnsigned(), DP = rpckp.DP.ToByteArrayUnsigned(), DQ = rpckp.DQ.ToByteArrayUnsigned(), InverseQ = rpckp.QInv.ToByteArrayUnsigned(), D = rpckp.PrivateExponent.ToByteArrayUnsigned(), Exponent = rpckp.PublicExponent.ToByteArrayUnsigned() }; RSACryptoServiceProvider rcsp = new RSACryptoServiceProvider(); rcsp.ImportParameters(parms); return rcsp; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda