A autenticação de mensagens desempenha um papel importante na autenticação de identidade e é uma parte importante do sistema de autenticação. É amplamente utilizada em sistemas financeiros e comerciais.
O código de autenticação de mensagem (Message Authentication Code ou MAC) é comumente usado como base para autenticação.
O princípio básico é: usar uma chave (chave privada) para gerar um pequeno bloco de dados e anexá-lo à mensagem a ser transmitida. Esta tecnologia assume que ambas as partes comunicantes compartilham uma chave K. Quando uma parte comunicante deseja transmitir dados M para a outra parte, o MAC da mensagem M é calculado através de um algoritmo específico = F (K, M), onde F se refere para a função de operação de autenticação e, em seguida, os dados da mensagem M e MAC são enviados juntos para a outra parte. Quando a outra parte recebe os dados, ela primeiro usa o mesmo algoritmo F para calcular o MAC e compara-o com o MAC transmitido. Se for o mesmo, os dados são considerados corretos. A função de autenticação é frequentemente considerada um tipo de algoritmo de criptografia, mas a diferença é que ela não é usada para operações inversas e possui um certo grau de segurança. Normalmente, diferentes sistemas aplicativos usam suas próprias funções de autenticação específicas, o que garante até certo ponto a segurança dos dados.
A partir do j2sdk1.4, Java fornece autenticação de mensagens da classe javax.crypto.Mac.
visualizar cópia simples para impressão da área de transferência?
byte[] macData = "este é um teste mac".getBytes(); //obter uma instância do Mac, usando o algoritmo HmacMD5;
Mac mac = Mac.getInstance("HmacMD5"); //inicia o IV do algoritmo, 8 bytes podem ser lidos do arquivo.
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // os bytes da chave secreta da validação do Mac, também podem ser lidos do arquivo
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f } //gerar o objeto chave secreto usando bytes secretos e Algoritmo DESede
Chave SecretKey = new SecretKeySpec(keyBytes, "DESede"); // inicia Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
byte[] macData = "este é um teste mac".getBytes(); //obter uma instância do Mac, usando o algoritmo HmacMD5;
Mac mac = Mac.getInstance("HmacMD5"); //inicia o IV do algoritmo, 8 bytes podem ser lidos do arquivo.
byte[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // os bytes da chave secreta da validação do Mac, também podem ser lidos do arquivo
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f } //gerar o objeto chave secreto usando bytes secretos e Algoritmo DESede
Chave SecretKey = new SecretKeySpec(keyBytes, "DESede"); // inicia Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
macCode é o Mac gerado, e o mesmo mac pode ser gerado com a mesma chave.
Contanto que as partes comunicantes garantam que usam a mesma chave, elas podem garantir que obterão o mesmo Mac para atingir o objetivo de verificação de mensagens.
Parece que este é o mesmo princípio da soma de verificação comumente usada na Internet.
-