Ir al contenido principal

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#

En Asp.net llenar un Dropdownlist es un poco distinto a cuando llenamos un Combobox en una aplicación de Windows Form, aunque son muy similares un Combobox tiene distintas funciones y por lo tanto diferentes propiedades, que cambian en un control DropdownList de ASP.NET y es necesario identificar cuales son y cual es la forma correcta de llenar un DropdownList, en este ejemplo lo haremos utilizando no datos estáticos sino que aprenderemos como hacerlos con datos de una consulta en SQL, lo demás a continuación.

Chart en C# - Control para Graficos en Windows Form

El siguiente articulo es un pequeño tutorial sobre como utilizar el Control "Chart" de .NET para crear gráficos en una aplicación, en este caso una aplicación para Windows, para su funcionamiento es simple y permite ayudarnos para crear gráficos en alguna de nuestras aplicaciones donde sea necesario este tipo de implementacion, así que tendremos que crear un proyecto nuevo del tipo Windows Form donde necesitaremos principalmente los siguientes componentes: - 3 Controles Textbox para ingresar los valores al gráfico. - 2 Botones para las 2 diferentes acciones que realizaremos. - 1 Control Chart que si no lo ubican se encuentra en la sección Data de su Visual Studio o Visual C# Express.
De tal forma que el resultado sea similar al de la imagen mostrada, ahora pasaremos al código para el primer botón que se encargara de asignar los valores al control Chart.

Crear un Sistema con conexión a BD paso a paso C#

Primero que nada esta estoy en un proceso de re-estructuración del Blog, anteriormente los artículos eran vagos con poca información y poco explícitos donde solo publicaba los enlaces de descarga de los proyectos, para cambiar esto ahora empezare a publicar soluciones completas, mejor estructurado el contenido de mis artículos y aunque no prometo hacerlo muy seguido debido a que pocas veces tengo tiempo, prometo que los contenidos serán de mayor calidad y mas útiles. Para demostrar esto primero que nada publicare una de las mayores herramientas que un programador novato y con un poco de experiencia pueden tener, la conexión con una BD, en este caso SQL Server que es la que mejor se integra con Visual Studio y la Plataforma .NET, empecemos.