martes, 4 de enero de 2011

Métodos de ecripción y desencripción

Es muy común que queramos encritar información para almacenarla, y cuando la necesitemos desencriptarla para utilizarla. A continuación les comparto métodos para hacer estas dos tareas de una forma muy sencilla.

public class Encryption
    {
        /// <summary>
        /// Método para encriptar una cadena.
        /// </summary>
        /// <param name="inputString">Cadena a encriptar.</param>
        /// <param name="key">Llave de encripción.</param>
        /// <returns></returns>
        public static String Encrypt(String inputString, String key)
        {
            Byte[] inputStringByte = System.Text.ASCIIEncoding.ASCII.GetBytes(inputString);
            Byte[] keyByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
            Byte[] iVByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);

            MemoryStream memoryStream = new MemoryStream(1024);
            DESCryptoServiceProvider desCryptoServiceProvider =  new DESCryptoServiceProvider();

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateEncryptor(keyByte, iVByte), CryptoStreamMode.Write))
            {
                cryptoStream.Write(inputStringByte, 0, inputStringByte.Length);
                cryptoStream.FlushFinalBlock();
                Byte[] result = new Byte[(Int32)memoryStream.Position];
                memoryStream.Position = 0;
                memoryStream.Read(result, 0, result.Length);
                cryptoStream.Close();
                return System.Convert.ToBase64String(result);
            }
        }

        /// <summary>
        /// Método para desencriptar una cadena.
        /// </summary>
        /// <param name="inputString">Cadena a desencriptar.</param>
        /// <param name="key">Llave de desencriptación.</param>
        /// <returns></returns>
        public static String Decrypt(String inputString, String key)
        {
            byte[] inputStringByte = System.Convert.FromBase64String(inputString);
            byte[] keyByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
            byte[] iVByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);

            MemoryStream memoryStream = new MemoryStream(inputStringByte.Length);

            DESCryptoServiceProvider desCryptoServiceProvider = new DESCryptoServiceProvider();

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateDecryptor(keyByte, iVByte), CryptoStreamMode.Read))
            {
                memoryStream.Write(inputStringByte, 0, inputStringByte.Length);
                memoryStream.Position = 0;
                string decrypted = new StreamReader(cryptoStream).ReadToEnd();
                cryptoStream.Close();
                return decrypted;
            }
        }
    }

No hay comentarios:

Publicar un comentario