Generar Hash MD5 en Java

Mohd Mohtashim Nawaz 12 octubre 2023
  1. Algoritmo hash MD5 en Java
  2. Usar hash MD5 en Java
  3. Use MD5 Hash en datos grandes en Java
  4. Conclusión
Generar Hash MD5 en Java

En este artículo, comprenderemos el algoritmo MD5 para generar el hash de datos y cómo podemos producir el hash MD5 de datos en Java.

Algoritmo hash MD5 en Java

El algoritmo hash MD5 es un algoritmo hash criptográfico y se utiliza principalmente como suma de comprobación de los archivos de datos. Podemos usar este algoritmo para generar un hash criptográfico de 128 bits de nuestros datos.

El algoritmo hash MD5 se usa mucho porque es mucho más rápido que los modernos algoritmos hash seguros.

Usar hash MD5 en Java

Java se usa ampliamente para la transferencia de archivos y la programación del lado del servidor; no es de extrañar encontrar una biblioteca para generar hash MD5. Java nos proporciona una clase MessageDigest, una clase secundaria de MessageDigestSpi que se encuentra en el paquete 'security' de Java.

Para generar el hash MD5 en Java,

  • Importar la clase MessageDisgest del paquete de seguridad de Java.
  • Convertir nuestros datos en un flujo de bytes antes de obtener el resumen del mensaje.
  • Luego, invoque el método getInstance() para crear una instancia del algoritmo hash MD5.

    Ejemplo :

    public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
    
  • Invocaremos el método digest() pasando los datos que queremos obtener al hash MD5.

    Ejemplo:

    public byte[] digest(byte[] input)
    
  • Almacene el resumen del mensaje como un flujo de bytes en un array de bytes.
  • Por último, convierta el resumen del mensaje de bytes a cadena.

Entendamos el enfoque anterior usando un código de trabajo en Java.

Fragmento de código:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] msg = str.getBytes();

    byte[] hash = null;
    try {
      MessageDigest md = MessageDigest.getInstance("MD5");
      hash = md.digest(msg);
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

Producción :

Hello, Peter
Your input: Hello, Peter
The MD5 hash: 945062a2fee23e0901b37fcb5cd952c9

Java is so awesome.
Your input: Java is so awesome.
The MD5 hash: 601835019da217140c2755c919ee18c2

Use MD5 Hash en datos grandes en Java

Si tiene datos grandes o lee los datos en fragmentos, utilice el método update().

Ejemplo:

public void update(byte[] input)

Cada vez que lea un fragmento de datos, debe llamar al método update() pasando el fragmento actual. Después de leer todos los datos, utilice la siguiente forma polimórfica del método digest().

Ejemplo:

public byte[] digest() // It means you will pass no parameter to the `digest()` method.

Para demostración, puede ver el siguiente ejemplo.

Fragmento de código:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class md5Test {
  public static void main(String[] args) {
    String str;
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter message:");
    str = scan.nextLine();
    System.out.println("Your input: " + str);

    byte[] hash = null;

    MessageDigest md = null;

    try {
      md = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }

    md.update(str.getBytes());

    System.out.println("Enter message:");
    str = scan.nextLine();

    md.update(str.getBytes());
    hash = md.digest();

    StringBuilder strBuilder = new StringBuilder();
    for (byte b : hash) {
      strBuilder.append(String.format("%02x", b));
    }
    String strHash = strBuilder.toString();
    System.out.println("The MD5 hash: " + strHash);
  }
}

Producción :

Enter message:
Hello Java
Your input: Hello Java
Enter message:
I'm Peter
The MD5 hash: 9008f99fa602a036ce0c7a6784b240b1

Conclusión

Una de las medidas de seguridad fundamentales que debemos garantizar al compartir los datos es garantizar la integridad de los datos. Por lo tanto, necesitamos un algoritmo hash que produzca una suma de verificación de los datos compartidos con el receptor para garantizar la integridad.

Hemos entendido el método para generar el checksum MD5 utilizando la clase MessageDigest y sus métodos. Es mejor tener cuidado al leer datos en fragmentos para no terminar con resultados incorrectos.