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