none
error al desencriptar RRS feed

  • Pregunta

  • estoy encriptando por medio de llaves publicas y privadas pero al momento de desecriptar  me este error

    Excepción no controlada del tipo 'System.Security.Cryptography.CryptographicException' en mscorlib.dll


    mi codigo en mi clase para encriptar y desencriptar es este:

      //encriptar
            public static byte[] Encriptar(string texto, string xmlpublico)
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);
                RSA.FromXmlString(xmlpublico);
                byte[] encriptardata = RSA.Encrypt(Encoding.ASCII.GetBytes(texto), false);
                return encriptardata;
            }
    
            //desencriptar
            public static byte[] Desencriptar(string textoecriptado, string xmlprivada)
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048);
                RSA.FromXmlString(xmlprivada);
                byte[] desencriptardata = RSA.Decrypt(Convert.FromBase64String(textoecriptado), false);
                return desencriptardata;
    
            }

    y mi codigo en botones es:

      private void encriptarToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Se necesita una llave publica xml para encriptar, favor selecinarla");
                OpenFileDialog abrirdialog = new OpenFileDialog();
                abrirdialog.Filter = "llave pubica en XML (*.xml)|*.xml";
                if (abrirdialog.ShowDialog() == DialogResult.OK)
                {
                    Stream temporal;
                    if ((temporal = abrirdialog.OpenFile()) != null)
                    {
                        string xmlarchivo = new StreamReader(temporal).ReadToEnd();
                        byte[] encriptardata = RSA.Encriptar(editor.Text, xmlarchivo);
                        edit.Text = Convert.ToBase64String(encriptardata);
                    }
                }
            }
    
            private void desencriptarToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Se necesita una llave privada xml para desencriptar, favor selecinarla");
                OpenFileDialog abrirdialog = new OpenFileDialog();
                abrirdialog.Filter = "llave privada en XML (*.xml)|*.xml";
    
                if (abrirdialog.ShowDialog() == DialogResult.OK)
                {
                    Stream temporal;
                    if ((temporal = abrirdialog.OpenFile()) != null)
                    {
                        string xmlarchivo = new StreamReader(temporal).ReadToEnd();
                        byte[] encriptardata = RSA.Desencriptar(editor.Text, xmlarchivo);
                        edit.Text = Convert.ToBase64String(encriptardata);
                    }
                }
    
            }

    viernes, 1 de junio de 2018 5:03

Respuestas

  • Buenos dias Ronald yo utilizo esta rutino para cifrar y deifrar mis cadenas

    erspero y  te sirva

    solo ocupas esta libreria

    using System.Security.Cryptography; // Libreria de cifrado.

    private  string clave = "cadenadecifrado"; // Clave de cifrado. NOTA: Puede ser cualquier combinación de carácteres.
            // Función para cifrar una cadena.
            string CadenaCifrada = "";
            public string cifrar(string cadena)
            {
                if (cadena != "")
                {
                    byte[] llave; //Arreglo donde guardaremos la llave para el cifrado 3DES.

                    byte[] arreglo = UTF8Encoding.UTF8.GetBytes(cadena); //Arreglo donde guardaremos la cadena descifrada.

                    // Ciframos utilizando el Algoritmo MD5.
                    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                    llave = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(clave));
                    md5.Clear();
                    md5.Dispose();
                    //Ciframos utilizando el Algoritmo 3DES.
                    TripleDESCryptoServiceProvider tripledes = new TripleDESCryptoServiceProvider();
                    tripledes.Key = llave;
                    tripledes.Mode = CipherMode.ECB;
                    tripledes.Padding = PaddingMode.PKCS7;
                    ICryptoTransform convertir = tripledes.CreateEncryptor(); // Iniciamos la conversión de la cadena
                    byte[] resultado = convertir.TransformFinalBlock(arreglo, 0, arreglo.Length); //Arreglo de bytes donde guardaremos la cadena cifrada.
                    tripledes.Clear();
                    tripledes.Dispose();
                    CadenaCifrada = Convert.ToBase64String(resultado, 0, resultado.Length); // Convertimos la cadena y la regresamos.
                }
                return CadenaCifrada;
            }

            // Función para descifrar una cadena.
            string cadena_descifrada = "";
            public string descifrar(string cadena)
            {
                if (cadena != "")
                {
                    byte[] llave;

                    byte[] arreglo = Convert.FromBase64String(cadena); // Arreglo donde guardaremos la cadena descovertida.

                    // Ciframos utilizando el Algoritmo MD5.
                    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                    llave = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(clave));
                    md5.Clear();
                    md5.Dispose();
                    //Ciframos utilizando el Algoritmo 3DES.
                    TripleDESCryptoServiceProvider tripledes = new TripleDESCryptoServiceProvider();
                    tripledes.Key = llave;
                    tripledes.Mode = CipherMode.ECB;
                    tripledes.Padding = PaddingMode.PKCS7;
                    ICryptoTransform convertir = tripledes.CreateDecryptor();
                    byte[] resultado = convertir.TransformFinalBlock(arreglo, 0, arreglo.Length);
                    tripledes.Clear();
                    tripledes.Dispose();
                    cadena_descifrada = UTF8Encoding.UTF8.GetString(resultado); // Obtenemos la cadena
                }
                return cadena_descifrada; // Devolvemos la cadena
            }

    • Marcado como respuesta Ronal Monroy martes, 21 de agosto de 2018 15:38
    viernes, 1 de junio de 2018 13:20