Criptografía Java - Resumen de mensajes

Las funciones hash son extremadamente útiles y aparecen en casi todas las aplicaciones de seguridad de la información.

Una función hash es una función matemática que convierte un valor de entrada numérico en otro valor numérico comprimido. La entrada a la función hash es de longitud arbitraria, pero la salida siempre es de longitud fija.

Los valores devueltos por una función hash se llaman message digest o simplemente hash values. La siguiente imagen ilustra la función hash.

Java proporciona una clase llamada MessageDigestque pertenece al paquete java.security. Esta clase admite algoritmos como SHA-1, SHA 256, MD5 para convertir un mensaje de longitud arbitraria en un resumen de mensaje.

Para convertir un mensaje determinado en un resumen de mensajes, siga los pasos que se indican a continuación:

Paso 1: crear un objeto MessageDigest

La clase MessageDigest proporciona un método llamado getInstance(). Este método acepta una variable String que especifica el nombre del algoritmo que se utilizará y devuelve un objeto MessageDigest que implementa el algoritmo especificado.

Cree el objeto MessageDigest usando el getInstance() método como se muestra a continuación.

MessageDigest md = MessageDigest.getInstance("SHA-256");

Paso 2: pasar datos al objeto MessageDigest creado

Después de crear el objeto de resumen del mensaje, debe pasarle el mensaje / datos. Puede hacerlo utilizando elupdate() método del MessageDigest class, este método acepta una matriz de bytes que representa el mensaje y la agrega / pasa al objeto MessageDigest creado anteriormente.

md.update(msg.getBytes());

Paso 3: generar el resumen del mensaje

Puede generar el resumen del mensaje utilizando el digest() método de la clase MessageDigest este método calcula la función hash en el objeto actual y devuelve el resumen del mensaje en forma de matriz de bytes.

Genere el resumen del mensaje utilizando el método de resumen.

byte[] digest = md.digest();

Ejemplo

A continuación se muestra un ejemplo que lee datos de un archivo y genera un resumen de mensaje y lo imprime.

import java.security.MessageDigest;
import java.util.Scanner;

public class MessageDigestExample {
   public static void main(String args[]) throws Exception{
      //Reading data from user
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the message");
      String message = sc.nextLine();
	  
      //Creating the MessageDigest object  
      MessageDigest md = MessageDigest.getInstance("SHA-256");

      //Passing data to the created MessageDigest Object
      md.update(message.getBytes());
      
      //Compute the message digest
      byte[] digest = md.digest();      
      System.out.println(digest);  
     
      //Converting the byte array in to HexString format
      StringBuffer hexString = new StringBuffer();
      
      for (int i = 0;i<digest.length;i++) {
         hexString.append(Integer.toHexString(0xFF & digest[i]));
      }
      System.out.println("Hex format : " + hexString.toString());     
   }
}

Salida

El programa anterior genera la siguiente salida:

Enter the message
Hello how are you
[[email protected]
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3