mar 22 2011
Crear Hash MD5, SHA en C Sharp

Los Hash son utilizados para aumentar el nivel de seguridad en los proyectos informáticos que se tenga, si antes no habías programado empleando algoritmos de encriptación hoy aprenderás! MD5, SHA1, SHA256, SHA384, SHA512.
Cabe mencionar que éstos algoritmos de encriptación “sólo son de ida” pues al obtener un Hash, no puedes conocer de dónde salió, motivo por el cual se aplican a los campos de contraseñas en las bases de datos. En el siguiente código, podemos ver cómo poco a poco se puede optimizar la forma de obtener el HASH deseado.
using System;
using System.Security.Cryptography;
using System.Text;
namespace Encriptacion
{
class Program
{
static void Main(string[] args)
{
Console.Title="Powered by IFXPERU - IFX Informatrix";
Console.WriteLine("Algoritmos de encriptacion");
Console.WriteLine("--------------------------");
Console.Write("Ingrese texto: ");
string TexToHash = Console.ReadLine();
Console.WriteLine("\nMD5 : "+GenerarMD5(TexToHash));
Console.WriteLine("\nSHA1 : " + GenerarSHA1(TexToHash));
Console.WriteLine("\nSHA256: " + GenerarSHA256(TexToHash));
Console.WriteLine("\nSHA384: " + GenerarSHA384(TexToHash));
Console.WriteLine("\nSHA512: " + GenerarSHA512(TexToHash));
Console.ReadLine();
}
public static string GenerarMD5(string texto)
{
//Declaramos variables:
Byte[] hash;
MD5 md5;
Byte[] textOriginal;
//Instanciamos el MD5CryptoServiceProvider:
md5 = MD5CryptoServiceProvider.Create();
//Obtenemos los bytes del texto ingresado:
textOriginal = ASCIIEncoding.Default.GetBytes(texto);
//Creamos el Hash MD5 [Se necesitan los bytes del texto]
hash = md5.ComputeHash(textOriginal);
//Definimos un StringBuilder
StringBuilder cadena = new StringBuilder();
//Procedemos a dar formato al HASH:
foreach (byte xD in hash)
{
cadena.AppendFormat("{0:x2}", xD);
}
//Finalmente retornamos el Hash creado:
return cadena.ToString();
}
public static string GenerarSHA1(string texto)
{
//Ahora vamos declarando y definiendo las variables:
SHA1 sha1 = SHA1CryptoServiceProvider.Create();
Byte[] textOriginal = ASCIIEncoding.Default.GetBytes(texto);
Byte[] hash = sha1.ComputeHash(textOriginal);
//Para dar formato al hash:
StringBuilder cadena = new StringBuilder();
foreach (byte xD in hash)
{
cadena.AppendFormat("{0:x2}", xD);
}
return cadena.ToString();
}
public static string GenerarSHA256(string texto)
{
//Reduciendo una variable, tenemos:
SHA256 sha256 = SHA256CryptoServiceProvider.Create();
Byte[] hash = sha256.ComputeHash(ASCIIEncoding.Default.GetBytes(texto));
StringBuilder cadena = new StringBuilder();
foreach (byte xD in hash)
{
cadena.AppendFormat("{0:x2}", xD);
}
return cadena.ToString();
}
public static string GenerarSHA384(string texto)
{
SHA384 sha384 = SHA384CryptoServiceProvider.Create();
Byte[] hash = sha384.ComputeHash(ASCIIEncoding.Default.GetBytes(texto));
StringBuilder cadena = new StringBuilder();
//Foreach en una sola línea:
foreach (byte xD in hash) cadena.AppendFormat("{0:x2}", xD);
return cadena.ToString();
}
public static string GenerarSHA512(string texto)
{
SHA512 sha512 = SHA512CryptoServiceProvider.Create();
Byte[] hash = sha512.ComputeHash(ASCIIEncoding.Default.GetBytes(texto));
//Nos despedimos del stringBuilder!
//En su lugar utilizaremos BitConverter del siguiente modo:
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
}
Más información sobre Programación en C#:
http://msdn.microsoft.com/es-pe/vcsharp/aa336766.aspx





abr 01, 2011 @ 14:52:03
Soy nuevo en esto de la informatica, lo que se es que es muy amplia y que llevaria toda una vida conocer de ella. Pero también se que podre llegar muy lejos si me esfuerzo. He aprendido muchas cosas. Muchas gracias Fredy.
feb 23, 2012 @ 17:59:57
Gracias si funciono!!! comparando la cadena con la página http://www.xorbin.com/tools/sha256-hash-calculator
mar 09, 2012 @ 13:22:36
de nada, estamos para compartir conocimiento!