Criptografia Java - Criando um MAC

MAC (Mensaio Aautenticação Code) o algoritmo é uma técnica criptográfica de chave simétrica para fornecer autenticação de mensagens. Para estabelecer o processo MAC, o emissor e o receptor compartilham uma chave simétrica K.

Essencialmente, um MAC é uma soma de verificação criptografada gerada na mensagem subjacente que é enviada junto com uma mensagem para garantir a autenticação da mensagem.

O processo de uso do MAC para autenticação é descrito na ilustração a seguir -

Em Java o Mac classe do javax.cryptopacote fornece a funcionalidade de código de autenticação de mensagem. Siga as etapas fornecidas abaixo para criar o código de autenticação de mensagem usando esta classe.

Etapa 1: Criar um objeto KeyGenerator

o KeyGenerator classe fornece getInstance() método que aceita uma variável String que representa o algoritmo de geração de chave necessário e retorna um KeyGenerator objeto que gera chaves secretas.

Crio KeyGenerator objeto usando o getInstance() método conforme mostrado abaixo.

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

Etapa 2: Criar objeto SecureRandom

o SecureRandom classe do java.SecurityO pacote fornece um gerador de número aleatório forte que é usado para gerar números aleatórios em Java. Instancie esta classe conforme mostrado abaixo.

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

Etapa 3: inicializar o KeyGenerator

o KeyGenerator classe fornece um método chamado init() este método aceita o SecureRandom objeto e inicializa o atual KeyGenerator.

Inicialize o objeto KeyGenerator criado na etapa anterior usando este método.

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

Etapa 4: Gerar chave

Gerar chave usando generateKey() método do KeyGenerator classe como mostrado abaixo.

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

Etapa 5: inicializar o objeto Mac

o init() método da classe Mac aceita um objeto Key e inicializa o objeto Mac atual usando a chave fornecida.

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

Etapa 6: Conclua a operação do mac

o doFinal()método da classe Mac é usado para terminar a operação Mac. Passe os dados necessários na forma de array de bytes para este método e finalize a operação conforme mostrado abaixo.

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

Exemplo

O exemplo a seguir demonstra a geração do Código de Autenticação de Mensagem (MAC) usando JCA. Aqui, pegamos uma mensagem simples "Olá, tudo bem" e geramos um Mac para essa mensagem.

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));     
   }
}

Resultado

O programa acima irá gerar a seguinte saída -

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