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?