Encriptar con MD5 C#

Uno de los mayores inconvenientes a la hora de realizar una aplicación en c# que maneje usuarios y bases de datos,  es la seguridad de la contraseña del usuario, esto no solo en aplicaciones web sino también en aplicaciones de escritorio o moviles puede ser un problema al que te habrás enfrentado, por lo tanto te presento una alternativa sencilla para que puedas encriptar las contraseñas de tus usuarios en una Base de datos y que no cualquiera que tenga permiso de entrar a esta pueda ver las contraseñas de los usuarios en esta misma.

TUTORIAL C#





Empezando el Proyecto

Primero que nada necesitamos realizar un proyecto del tipo Windows Form, o Web Form en este caso sera un Windows Form que me parece mas sencillo para este tipo de ejemplos, aunque el mismo código puede ser adaptado a un Web Form, crearemos un Form con los elementos que se ven en la imagen, una vez hecho esto solo nos queda entrar al código, aunque tratare de dar una breve explicación de como funciona este antes de verlo.

Como Funciona

Este código es sumamente sencillo, utiliza una librería de .Net la cual es:
System.Security.Cryptography;

La cual es la que realizara el trabajo pesado por nosotros, otra de las cosas que necesitamos es especificar una llave o "key" la cual nos servirá para encriptar y también para desencriptar, la cual podemos incluir en el código como en este ejemplo o manejarla como mejor nos parezca, y tendremos 2 métodos uno para encriptar y otro para revertir o desencriptar, una vez entendido esto veamos el codigo.

Codificando

Primero que nada crearemos una variable del tipo string que contendra la llave:

string key = "mikey";

Después creamos los métodos tanto para encriptar como para desencriptar:


public string Encriptar(string texto)
{
//arreglo de bytes donde guardaremos la llave
byte[] keyArray;
//arreglo de bytes donde guardaremos el texto
//que vamos a encriptar

byte[] Arreglo_a_Cifrar =
UTF8Encoding.UTF8.GetBytes(texto);

//se utilizan las clases de encriptación
//provistas por el Framework
//Algoritmo MD5

MD5CryptoServiceProvider hashmd5 =
new MD5CryptoServiceProvider();
//se guarda la llave para que se le realice
//hashing

keyArray = hashmd5.ComputeHash(
UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

//Algoritmo 3DAS
TripleDESCryptoServiceProvider tdes =
new TripleDESCryptoServiceProvider();

tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

//se empieza con la transformación de la cadena
ICryptoTransform cTransform =
tdes.CreateEncryptor();

//arreglo de bytes donde se guarda la
//cadena cifrada

byte[] ArrayResultado =
cTransform.TransformFinalBlock(Arreglo_a_Cifrar,
0, Arreglo_a_Cifrar.Length);

tdes.Clear();

//se regresa el resultado en forma de una cadena
return Convert.ToBase64String(ArrayResultado,
0, ArrayResultado.Length);
}

public string Desencriptar(string textoEncriptado)
{
byte[] keyArray;
//convierte el texto en una secuencia de bytes
byte[] Array_a_Descifrar =
Convert.FromBase64String(textoEncriptado);

//se llama a las clases que tienen los algoritmos
//de encriptación se le aplica hashing
//algoritmo MD5

MD5CryptoServiceProvider hashmd5 =
new MD5CryptoServiceProvider();

keyArray = hashmd5.ComputeHash(
UTF8Encoding.UTF8.GetBytes(key));

hashmd5.Clear();

TripleDESCryptoServiceProvider tdes =
new TripleDESCryptoServiceProvider();

tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;

ICryptoTransform cTransform =
tdes.CreateDecryptor();

byte[] resultArray =
cTransform.TransformFinalBlock(Array_a_Descifrar,
0, Array_a_Descifrar.Length);

tdes.Clear();
//se regresa en forma de cadena
return UTF8Encoding.UTF8.GetString(resultArray);
}

Una vez terminado esto solo nos queda ingresar las llamadas a estos métodos desde los botones de la aplicación:

private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = Encriptar(textBox1.Text);
}

private void button2_Click(object sender, EventArgs e)
{
textBox3.Text = Desencriptar(textBox2.Text);
}

El resultado final seria este:


Con esto terminamos este ejemplo, pero recuerden que entre mas sencilla sea la forma de encriptar y desencriptar mas fácil sera para un usuario experimentado averiguar la forma de desencriptar nuestra información, este ejemplo es meramente educativo sin embargo no es el mas seguro, saludos.


Comentarios

  1. Disculpa haz intentado crear el menu de windows 8 Metro style desconozco como codificar los itmems del grupo alojado sabes como es mi duda Gracias y excelente post..................

    ResponderEliminar
    Respuestas
    1. La verdad aun desconozco sobre todo lo relacionado con Windows 8, quizás mas adelante.

      Eliminar
  2. Buenísimo! muchas gracias! me ha ayudado muchísimo!

    ResponderEliminar
  3. Buenisimo exelente aporte uno de los mejores diria yo!!!

    ResponderEliminar
  4. Muchas gracias...muy claro y conciso tu articulo!!! :)

    ResponderEliminar
  5. Grande Amigo me haz salvado (y)

    ResponderEliminar
  6. Exelente me sirvio mucho gracias por compartir tus conocimientos.

    ResponderEliminar
  7. Muy buen articulo solo como una aportación en tu método Encriptar
    tienes un parametro de tipo String que es el texto que obtienes del TextBox de tu Formulario para poder cifrarlo ok.

    y para llamar este metodo haces esto
    textBox2.Text = Encriptar(textBox1.Text);


    Si tu pones en tu metodo
    public string Encriptar(this string texto)
    {
    }

    puedes mandar a llamar tu metodo de la siguiente manera
    textBox2.Text.Encriptar(textBox1.Text);
    tal y como mandas a llamar el metodo ToString();

    Esto le da una mejor vista a tu codigo y es mas practico.
















































    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Llenar un DropdownList con Datos ASP.NET C#

Validar Correo Electronico C#

Añadir Items a un ListBox desde un Control Textbox C#