Calcular hash MD5 a partir de una cadena en C#

Harshit Jindal 12 octubre 2023
  1. Usando el Algoritmo MD5 en C#
  2. Utilice la biblioteca System.Security.Cryptography para calcular el hash MD5 a partir de una cadena C#
Calcular hash MD5 a partir de una cadena en C#

Los algoritmos hash son algoritmos matemáticos que se utilizan para asignar datos de entrada arbitrarios a un hash de tamaño fijo. Se utilizan para múltiples propósitos, como almacenar datos en estructuras de datos como maps hash, verificación de contraseña, digestión de mensajes y seguridad de criptomonedas.

El MD5 pertenece a la clase de digestión de mensajes de los algoritmos hash. Rivest desarrolló MD5 y otros algoritmos como MD2, MD4, etc.

El algoritmo se diseñó originalmente para autenticar firmas digitales. Pero más tarde, se descubrieron muchas vulnerabilidades que llevaron a su desaprobación.

Sin embargo, todavía se usa para verificar la integridad de los datos y constituye una base para comprender algoritmos avanzados. El algoritmo MD5, como todos los algoritmos de digestión de mensajes, toma como entrada un mensaje de longitud desconocida y lo convierte en un hash de tamaño fijo.

Un cambio menor en la cadena de entrada dará como resultado un hash completamente diferente. Este artículo aprenderá a calcular el hash MD5 usando C#.

Usando el Algoritmo MD5 en C#

El algoritmo MD5 consta de los siguientes cuatro pasos principales:

Primero, agregue bits de relleno.

En este paso, agregamos bits de relleno para que el número total de bits sea 64 menos que el múltiplo más cercano de 512. Se hace para que el algoritmo pueda procesar datos del tamaño de 512 bits y el paso 2, se suma la longitud de la cadena expresada en 64 bits para obtener un múltiplo par de 512.

En segundo lugar, agregue bits de longitud.

Calcula la longitud de la cadena en 64 bits. Añádalos a la salida formada en el paso 1.

En tercer lugar, inicialice el búfer MD.

Inicializamos 4 buffers de digestión de mensajes de 32 bits llamados A, B, C y D. Son los siguientes:

A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10

El cuarto es el procesamiento de bloques individuales de 512 bits.

Los bits enteros se dividen en bloques de tamaño 512. Cada bloque formado se divide en 16 sub-bloques de 32 bits. Todos los bloques 16 formados se pasan a través de una serie de operaciones 4 con los búferes A, B, C y D para dar el hash final.

Utilice la biblioteca System.Security.Cryptography para calcular el hash MD5 a partir de una cadena C#

using System;
using System.Security.Cryptography;
using System.Text;

public class Test {
  public static string ComputeMd5Hash(string message) {
    using (MD5 md5 = MD5.Create()) {
      byte[] input = Encoding.ASCII.GetBytes(message);
      byte[] hash = md5.ComputeHash(input);

      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < hash.Length; i++) {
        sb.Append(hash[i].ToString("X2"));
      }
      return sb.ToString();
    }
  }
  public static void Main() {
    string message = "Welcome to DelfStack";
    Console.WriteLine(ComputeMd5Hash(message));
  }
}

Producción :

53C62733BB54F2B720A32490E6C447FF

En el programa anterior, creamos un objeto de la clase MD5 presente en C# que proporciona una implementación preparada del algoritmo md5 a través del método ComputeHash().

Convertimos nuestra cadena de mensajes en un byte stream para que coincida con la firma de la función del método ComputeHash(), que luego devuelve el resultado en forma de byte stream. A continuación, utilizamos la clase de creación de cadenas para convertir el flujo de bytes en una cadena C# válida.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn