Criptografía en Java. Class MessageDigest

Hola Habr! Les presento la traducción del tercer artículo "Java MessageDigest" de Jakob Jenkov de una serie de artículos para principiantes que desean aprender los conceptos básicos de la criptografía en Java.


Tabla de contenido:


  1. Criptografía
  2. Cifrado
  3. Messagedigest
  4. Mac
  5. Firma
  6. Par de llaves
  7. Generador de claves
  8. KeyPairGenerator
  9. Keystore
  10. Keytool
  11. Certificado
  12. CertificateFactory
  13. CertPath

Java MessageDigest


La clase Java MessageDigest representa una función hash criptográfica que puede calcular un resumen de mensaje a partir de datos binarios. Cuando recibe un conjunto de datos cifrados, no puede estar seguro de que no se hayan modificado durante el transporte. Un resumen de mensaje ayuda a resolver este problema.


Para determinar si los datos cifrados se modificaron durante el transporte, el remitente debe calcular el resumen del mensaje a partir de los datos y enviarlo junto con los datos. El otro lado, al recibir datos cifrados y un resumen del mensaje, puede volver a calcular el resumen del mensaje a partir de los datos y verificar si el resumen calculado del mensaje coincide con el resumen del mensaje recibido con los datos. Si los dos resúmenes de mensajes coinciden, existe la posibilidad de que los datos cifrados no hayan cambiado durante el transporte.


Hay varias condiciones que deben cumplirse para que un resumen de mensaje sea útil como mecanismo de detección de cambios. Sin embargo, las condiciones exactas son parte de una teoría criptográfica que no se trata en este artículo, sino que solo explica cómo usar Java para recibir un resumen de mensajes en la clase MessageDigest.


Crear una instancia de MessageDigest


Para crear una instancia de la clase MessageDigest, se llama al método getInstance () estático de la clase MessageDigest. Aquí hay un ejemplo de cómo crear una instancia de MessageDigest:


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

El parámetro de cadena pasado al método getInstance () determina el algoritmo de resumen utilizado para un mensaje en particular.


Algoritmos de resumen de mensaje


La API de criptografía de Java admite los siguientes algoritmos de resumen de mensajes (los proveedores de criptografía externos pueden admitir más):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

No todos estos algoritmos son igualmente seguros. Al momento de escribir, se recomienda que use SHA-256 o superior para obtener el mayor nivel de seguridad posible.


Cálculo de resumen de mensaje


Al crear una instancia de MessageDigest, puede usarla para calcular el resumen del mensaje. Si tiene un bloque de datos para calcular el resumen del mensaje, use el método digest () . Así es como se ve un cálculo de resumen de mensaje de un solo bloque de datos:


 byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1); 

Si hay varios bloques de datos que se incluirán en el mismo resumen de mensaje, llame al método update () y finalice con una llamada a digest () . Así es como se ve un cálculo de resumen de mensaje de múltiples bloques de datos:


 byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest(); 

Source: https://habr.com/ru/post/444974/


All Articles