C#: Calcular y verificar Hash MD5 y SHA-256

Tiempo de lectura: 2 minutos
//Usings.
using System;
using System.Security.Cryptography;
using System.Text;

/// <summary>
/// Método para calcular el hash MD5 de una cadena de texto.
/// </summary>
/// <param name="text">La cadena de texto de entrada.</param>
/// <returns>El hash MD5 calculado como una cadena hexadecimal.</returns>
public static string EncodeMD5Hash(string text)
{
  using (MD5 md5 = MD5.Create())
  {
    byte[] inputBytes = Encoding.UTF8.GetBytes(text);
    byte[] hashBytes = md5.ComputeHash(inputBytes);

    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < hashBytes.Length; i++)
    {
      builder.Append(hashBytes[i].ToString("x2"));
    }

    return builder.ToString();
  }
}

/// <summary>
/// Verifica si una cadena de texto coincide con un hash MD5 dado.
/// </summary>
/// <param name="text">La cadena de texto de entrada.</param>
/// <param name="hash">El hash MD5 a verificar.</param>
/// <returns>Booleano para indicar si el hash coincide con el hash MD5 calculado de la cadena de texto (true) true, o no (false).</returns>
public static bool VerifyMD5Hash(string text, string hash)
{
  string inputHash = EncodeMD5Hash(text);
  StringComparer comparer = StringComparer.OrdinalIgnoreCase;

  return comparer.Compare(inputHash, hash) == 0;
}

/// <summary>
/// Codifica una cadena de texto en un hash SHA-256.
/// </summary>
/// <param name="text">Cadena de texto a codificar.</param>
/// <returns>El hash SHA-256 en formato hexadecimal.</returns>
public static string EncodeSHA256(string text)
{
  using (SHA256 sha256 = SHA256.Create())
  {
    byte[] inputBytes = Encoding.UTF8.GetBytes(text);
    byte[] hashBytes = sha256.ComputeHash(inputBytes);
    StringBuilder builder = new StringBuilder();

    for (int i = 0; i < hashBytes.Length; i++)
    {
      builder.Append(hashBytes[i].ToString("x2"));
    }

    return builder.ToString();
  }
}

/// <summary>
/// Verifica si una cadena de texto coincide con un hash SHA-256 dado.
/// </summary>
/// <param name="text">La cadena de texto de entrada.</param>
/// <param name="hash">El hash SHA-256 a verificar.</param>
/// <returns>Booleano para indicar si el hash coincide con el hash SHA-256 calculado de la cadena de texto (true) true, o no (false).</returns>
public static bool VerifySha256Hash(string text, string hash)
{
  string inputHash = EncodeSHA256(text);
  StringComparer comparer = StringComparer.OrdinalIgnoreCase;

  return comparer.Compare(inputHash, hash) == 0;
}

Deja un comentario