La autenticación de mensajes juega un papel importante en la autenticación de identidad y es una parte importante del sistema de autenticación. Se utiliza ampliamente en sistemas financieros y comerciales.
El código de autenticación de mensajes (Código de autenticación de mensajes o MAC) se utiliza comúnmente como base para la autenticación.
El principio básico es: utilizar una clave (clave privada) para generar un pequeño bloque de datos y adjuntarlo al mensaje que se transmitirá. Esta tecnología supone que ambas partes que se comunican comparten una clave K. Cuando una parte que se comunica quiere transmitir datos M a la otra parte, la MAC del mensaje M se calcula mediante un algoritmo específico = F (K, M), donde F se refiere a la función de operación de autenticación, y luego los datos del mensaje M y MAC se envían a la otra parte juntos. Cuando la otra parte recibe los datos, primero utiliza el mismo algoritmo F para calcular la MAC y la compara con la MAC transmitida. Si es la misma, los datos se consideran correctos. La función de autenticación suele considerarse un tipo de algoritmo de cifrado, pero la diferencia es que no se utiliza para operaciones inversas y tiene cierto grado de seguridad. Normalmente, los diferentes sistemas de aplicación utilizan sus propias funciones de autenticación específicas, lo que garantiza hasta cierto punto la seguridad de los datos.
Desde j2sdk1.4 en adelante, Java proporciona autenticación de mensajes de clase javax.crypto.Mac.
¿Ver copia simple en el portapapeles?
byte[] macData = "esta es una prueba de Mac".getBytes() //obtiene una instancia de Mac, usando el algoritmo HmacMD5.
Mac mac = Mac.getInstance("HmacMD5"); //inicia el IV del algoritmo, se pueden leer 8 bytes del archivo.
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // los bytes de la clave secreta de la validación de Mac, también se pueden leer desde el archivo.
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //generar el objeto clave secreto usando bytes secretos y Algoritmo DESede
Clave SecretKey = nueva SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(clave, especificación);
byte[] macCode = mac.doFinal(macData);
byte[] macData = "esta es una prueba de Mac".getBytes() //obtiene una instancia de Mac, usando el algoritmo HmacMD5.
Mac mac = Mac.getInstance("HmacMD5"); //inicia el IV del algoritmo, se pueden leer 8 bytes del archivo.
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // los bytes de la clave secreta de la validación de Mac, también se pueden leer desde el archivo.
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; //generar el objeto clave secreto usando bytes secretos y Algoritmo DESede
Clave SecretKey = nueva SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(clave, especificación);
byte[] macCode = mac.doFinal(macData);
macCode es la Mac generada y la misma Mac se puede generar con la misma clave.
Siempre que las partes que se comunican se aseguren de utilizar la misma clave, pueden asegurarse de obtener la misma Mac para lograr el propósito de verificar el mensaje.
Parece que este es el mismo principio que la suma de verificación que se usa comúnmente en Internet.
-