Hola Habr! Les presento la traducción del cuarto artículo "Java Mac" 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:
- Criptografía Java
- Cifrado de Java
- Messagedigest
- Mac
- Firma
- Par de llaves
- Generador de claves
- KeyPairGenerator
- Keystore
- Keytool
- Certificado
- CertificateFactory
- CertPath
Código de autenticación de mensaje (MAC)
Java Mac ( javax.crypto.Mac ) genera un código de autenticación de mensaje (MAC) a partir de datos binarios. MAC es un resumen de mensaje cifrado con una clave secreta. Solo con una clave secreta puede verificar la autenticidad del MAC.
Instanciación
Antes de usar la clase Mac, debe crear una instancia de Mac. Se crea una instancia de una clase Mac utilizando el método getInstance () . Aquí hay un ejemplo de cómo crear una instancia de Mac:
Mac mac = Mac.getInstance("HmacSHA256");
El parámetro de cadena pasado a getInstance () contiene el nombre del algoritmo utilizado. En este caso, se utiliza el algoritmo HmacSHA256.
Inicialización
Después de crear la instancia, la Mac debe inicializarse. Una instancia de Mac se inicializa llamando al método init () , pasando la clave secreta que la instancia utilizará como parámetro. Aquí hay un ejemplo de inicialización de una instancia de Mac:
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key);
El método init () acepta una instancia de Key . Este ejemplo usa SecretKeySpec , que implementa la interfaz Key.
Cálculo MAC
Usando la instancia MAC (después de la inicialización), puede comenzar a calcular los datos MAC. Para calcular el valor MAC, llame al método update () o doFinal () . Si solo tiene un bloque de datos para calcular el MAC, puede llamar directamente a doFinal () , por ejemplo:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data);
Si tiene varios bloques de datos para calcular MAC, por ejemplo, si lee el archivo bloque por bloque, debe llamar al método update () para cada bloque y finalizar con doFinal () en el último bloque. Aquí hay un ejemplo:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal();