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?