28 sept 2016

Calcular un hash MD5 y devolverlo en formato leíble

El uso de hashes es bastante común en programación, se puede utilizar para guardar una contraseña, (en este caso ya no es recomendable recurrir al MD5), se puede usar para guardar una cadena de verificación o firma e incluso para comparar archivos.

El framework .Net nos presenta una gran variedad de herramientas para calcular un hash, en este caso usaremos la clase MD5CryptoServiceProvider del namespace using System.Security.Cryptography.

Una duda que muchas veces aparece al intentar usar estos CryptoServiceProviders es cómo mostrar el hash para que sea leíble, ya que la función que utilizamos nos devuelveun Array de bytes.

Pues eso es sencillo, recurrimos a la función ToString() y como argumento pasamos "x2" con lo que por cada ítem del array obtendremos un valor hexadecimal de 2 dígitos.

Entonces la función se vería así:

public string MD5Hash(string texto)
{
 var resultado = new StringBuilder();
 using (var md5 = new MD5CryptoServiceProvider())
 {
  var hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(texto);
  foreach (byte b in hash)
  {
   resultado.Append(b.ToString("x2"));
  }
 }
 return resultado.ToString();
}