22 de agosto de 2010

Encriptar y Desencriptar con C# (Método Simple)

El post de hoy es muy directo, porque cuento con poco tiempo. La idea es la de postear una clase con varios métodos que suelo usar cuando necesito encriptar y desencriptar cadenas de texto.

C# Encriptar y Desencriptar (Clase)

La clase contiene 4 métodos:

  • 2 métodos para encriptar. Uno de ello simple que solo le pasamos el texto a encriptar y usando el resto de los valores por defecto devolvemos el texto ya encriptado. El segundo método hace exactamente lo mismo pero necesita que le pasemos por parámetro todos los datos necesarios para obtener la clave de encriptación.
  • Otros 2 métodos para desencriptar. Uno de ello simple que solo le pasamos el texto encriptado y usando el resto de los valores por defecto devolvemos el texto ya desencriptado. El segundo método hace exactamente lo mismo pero necesita que le pasemos por parámetro todos los datos necesarios para obtener la clave de encriptación.

using System;

using System.IO;

using System.Security.Cryptography;

using System.Text; 

namespace dllObjetosComunes.Utiles

{

  public static class Encriptador

  {

    public static class RijndaelSimple

    {

      #region Encriptar

      /// <summary>

      /// Método para encriptar un texto plano usando el algoritmo (Rijndael).

      /// Este es el mas simple posible, muchos de los datos necesarios los

      /// definimos como constantes.

      /// </summary>

      /// <param name="textoQueEncriptaremos">texto a encriptar</param>

      /// <returns>Texto encriptado</returns>

      public static string Encriptar(string textoQueEncriptaremos)

      {

        return Encriptar(textoQueEncriptaremos,

          "pass75dc@avz10", "s@lAvz", "MD5", 1, "@1B2c3D4e5F6g7H8", 128);

      }  

      /// <summary>

      /// Método para encriptar un texto plano usando el algoritmo (Rijndael)

      /// </summary>

      /// <returns>Texto encriptado</returns>

      public static string Encriptar(string textoQueEncriptaremos,

        string passBase, string saltValue, string hashAlgorithm,

        int passwordIterations, string initVector, int keySize)

      {

        byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);

        byte[] saltValueBytes  = Encoding.ASCII.GetBytes(saltValue);

        byte[] plainTextBytes  = Encoding.UTF8.GetBytes(textoQueEncriptaremos);  

        PasswordDeriveBytes password = new PasswordDeriveBytes(passBase,

          saltValueBytes, hashAlgorithm, passwordIterations);

        byte[] keyBytes = password.GetBytes(keySize / 8);

        RijndaelManaged symmetricKey = new RijndaelManaged() {

          Mode = CipherMode.CBC };

        ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes,

          initVectorBytes);

        MemoryStream memoryStream = new MemoryStream();       

        CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor,

         CryptoStreamMode.Write);

        cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);

        cryptoStream.FlushFinalBlock();  

        byte[] cipherTextBytes = memoryStream.ToArray();

        memoryStream.Close();

        cryptoStream.Close();

        string cipherText = Convert.ToBase64String(cipherTextBytes);      

        return cipherText;

      }

      #endregion  

      #region Desencriptar

      /// <summary>

      /// Método para desencriptar un texto encriptado.

      /// </summary>

      /// <returns>Texto desencriptado</returns>

      public static string Desencriptar(string textoEncriptado)

      {

        return Desencriptar(textoEncriptado, "pass75dc@avz10", "s@lAvz", "MD5",

          1, "@1B2c3D4e5F6g7H8", 128);

      }  

      /// <summary>

      /// Método para desencriptar un texto encriptado (Rijndael)

      /// </summary>

      /// <returns>Texto desencriptado</returns>

      public static string Desencriptar(string textoEncriptado, string passBase,

        string saltValue, string hashAlgorithm, int passwordIterations,

        string initVector, int keySize)

      {

        byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);

        byte[] saltValueBytes  = Encoding.ASCII.GetBytes(saltValue);

        byte[] cipherTextBytes = Convert.FromBase64String(textoEncriptado);

        PasswordDeriveBytes password = new PasswordDeriveBytes(passBase,

          saltValueBytes, hashAlgorithm, passwordIterations);

        byte[] keyBytes = password.GetBytes(keySize / 8);

        RijndaelManaged symmetricKey = new RijndaelManaged() {

          Mode = CipherMode.CBC };

        ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes,

          initVectorBytes);

        MemoryStream  memoryStream = new MemoryStream(cipherTextBytes);

        CryptoStream  cryptoStream = new CryptoStream(memoryStream, decryptor,

          CryptoStreamMode.Read);

        byte[] plainTextBytes = new byte[cipherTextBytes.Length];

        int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0,

          plainTextBytes.Length); 

        memoryStream.Close();

        cryptoStream.Close();

        string plainText = Encoding.UTF8.GetString(plainTextBytes, 0,

          decryptedByteCount);

        return plainText;

      }

      #endregion

    }

  }

} 

 

Artículos Relacionados:

18 de agosto de 2010

jQuery, Teclas de acceso directo

Es un plugin jQuery simple y bastante útil. Suelo usarlo en la mayoría de mis formularios para crear atajos de teclados a distintas funciones, pero veamos un ejemplo.

Imaginemos que deseamos que cuando el usuario presione la tecla enter, se dispare un evento determinado (ej.: lanzar una búsqueda). Pues bien, para ello usaremos el plugin jquery.hotkeys.

Lo primero es Incluir las bibliotecas javascript necesarias:

<script src="jquery-1.3.2.min.js"></script>
<script src="jquery.hotkeys.js"></script>
Hacer uso del plugin hotkeys 

<script>
  $(document).ready(function(){

    $(document).bind('keydown', 'return', function(evt){ 
      alert('Has presionado la tecla return...'); 
      return false; 
    });  
 
  });
</script>

Y ya está, al estar en el formulario si presionas la tecla enter (return) mostraremos un alert().

Si estas pensando en usarlo no dejes de visitar el sitio oficial.