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