Criptografía Java: creación de una MAC

MAC (Mmensaje Aautenticación CEl algoritmo ode) es una técnica criptográfica de clave simétrica para proporcionar autenticación de mensajes. Para establecer el proceso MAC, el remitente y el receptor comparten una clave simétrica K.

Básicamente, una MAC es una suma de verificación cifrada generada en el mensaje subyacente que se envía junto con un mensaje para garantizar la autenticación del mensaje.

El proceso de utilizar MAC para la autenticación se muestra en la siguiente ilustración:

En Java el Mac clase de la javax.cryptoEl paquete proporciona la funcionalidad del código de autenticación de mensajes. Siga los pasos que se indican a continuación para crear un código de autenticación de mensajes utilizando esta clase.

Paso 1: crear un objeto KeyGenerator

los KeyGenerator la clase proporciona getInstance() método que acepta una variable de cadena que representa el algoritmo de generación de claves requerido y devuelve un KeyGenerator objeto que genera claves secretas.

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

//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");

Paso 2: crear un objeto SecureRandom

los SecureRandom clase de la java.SecurityEl paquete proporciona un potente generador de números aleatorios que se utiliza para generar números aleatorios en Java. Cree una instancia de esta clase como se muestra a continuación.

//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();

Paso 3: inicializar KeyGenerator

los KeyGenerator la clase proporciona un método llamado init() este método acepta el SecureRandom objeto e inicializa la corriente KeyGenerator.

Inicialice el objeto KeyGenerator creado en el paso anterior usando este método.

//Initializing the KeyGenerator
keyGen.init(secRandom);

Paso 4: generar clave

Generar clave usando generateKey() método del KeyGenerator clase como se muestra a continuación.

//Creating/Generating a key
Key key = keyGen.generateKey();

Paso 5: inicializa el objeto Mac

los init() El método de la clase Mac acepta un objeto Key e inicializa el objeto Mac actual usando la clave dada.

//Initializing the Mac object
mac.init(key);

Paso 6: finalice la operación de mac

los doFinal()El método de la clase Mac se utiliza para finalizar la operación Mac. Pase los datos necesarios en forma de matriz de bytes a este método y finalice la operación como se muestra a continuación.

//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);

Ejemplo

El siguiente ejemplo demuestra la generación de código de autenticación de mensajes (MAC) utilizando JCA. Aquí, tomamos un simple mensaje "Hola cómo estás" y generamos una Mac para ese mensaje.

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;

public class MacSample {
   public static void main(String args[]) throws Exception{
      //Creating a KeyGenerator object
      KeyGenerator keyGen = KeyGenerator.getInstance("DES");

      //Creating a SecureRandom object
      SecureRandom secRandom = new SecureRandom();

      //Initializing the KeyGenerator
      keyGen.init(secRandom);

      //Creating/Generating a key
      Key key = keyGen.generateKey();	 

      //Creating a Mac object
      Mac mac = Mac.getInstance("HmacSHA256");

      //Initializing the Mac object
      mac.init(key);

      //Computing the Mac
      String msg = new String("Hi how are you");
      byte[] bytes = msg.getBytes();      
      byte[] macResult = mac.doFinal(bytes);

      System.out.println("Mac result:");
      System.out.println(new String(macResult));     
   }
}

Salida

El programa anterior generará la siguiente salida:

Mac result:
HÖ„^ǃÎ_Utbh…?š_üzØSSÜh_ž_œa0ŽV?