/// <summary> /// Genera _bytEncriptado: Es unByte[] con el contenido de llavePublica RSA encriptada (bytes) y contenido Encriptado Simetrico /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAsimEncriptar_Click(object sender, EventArgs e) { byte[] _bytEncriptado = null; System.Security.Cryptography.CspParameters csp = new CspParameters(); csp.KeyContainerName = "pepe"; //Creamos una instancia del encritador publico RSACryptoServiceProvider _objEncriptadorPublicoRSA = new RSACryptoServiceProvider(csp); //Le asignamos la llave genarada _objEncriptadorPublicoRSA.FromXmlString(this.txtAsimLlavePublica.Text); if (this.chkSimetrica.Checked) { //Se declara la memoria para almacenar la llave utilizada por nuestro Rijndael personalizado byte[] _bytKey = (Rijndael.Create()).Key; //Se encripta el texto y se obtiene la llave que se utilizó para la encriptación byte[] _contenidoEncriptadoSimetrico = MiRijndael.Encriptar(this.txtAsimAEncriptar.Text, _bytKey); //Se encripta la llave con el algoritmo RSA byte[] llaveEncriptadaRSA = _objEncriptadorPublicoRSA.Encrypt(_bytKey, false); #region Se copia en un vector la llave encriptada y el contenido encriptado Simetrico (Rijndael) _bytEncriptado = new byte[llaveEncriptadaRSA.Length + _contenidoEncriptadoSimetrico.Length]; llaveEncriptadaRSA.CopyTo(_bytEncriptado, 0); _contenidoEncriptadoSimetrico.CopyTo(_bytEncriptado, llaveEncriptadaRSA.Length); #endregion } else { _bytEncriptado = _objEncriptadorPublicoRSA.Encrypt(System.Text.Encoding.UTF8.GetBytes(this.txtAsimAEncriptar.Text), false); } this.txtAsimEncriptado.Text = Convert.ToBase64String(_bytEncriptado); }
public string DesEncriptar(byte[] bytEncriptado, bool blnConSimetrico) { if (blnConSimetrico) { //Array que continen la clave simetrica encriptada byte[] keyArray = new byte[objRSA.KeySize / 8]; //Array que continen la encriptacion simetrica del contenido byte[] encrypted = new byte[bytEncriptado.Length - keyArray.Length]; //Copia la clave asimetrica Array.Copy(bytEncriptado, 0, keyArray, 0, keyArray.Length); //Copia de contenido simetrico Array.Copy(bytEncriptado, keyArray.Length, encrypted, 0, encrypted.Length); //Obtinen la clave Simetrica desencripptada que utilizara el Algoritmo simetrico byte[] simKey = this.objRSA.Decrypt(keyArray, false); return(MiRijndael.Desencriptar(encrypted, simKey)); } else { return(System.Text.Encoding.UTF8.GetString(this.objRSA.Decrypt(bytEncriptado, false))); } }