Crittografia Java - Creazione di un MAC

MAC (Message Aautenticazione Code) è una tecnica crittografica a chiave simmetrica per fornire l'autenticazione dei messaggi. Per stabilire il processo MAC, il mittente e il destinatario condividono una chiave simmetrica K.

In sostanza, un MAC è un checksum crittografato generato sul messaggio sottostante che viene inviato insieme a un messaggio per garantire l'autenticazione del messaggio.

Il processo di utilizzo del MAC per l'autenticazione è illustrato nella figura seguente:

In Java il Mac classe di javax.cryptopacchetto fornisce la funzionalità del codice di autenticazione del messaggio. Seguire i passaggi indicati di seguito per creare il codice di autenticazione del messaggio utilizzando questa classe.

Passaggio 1: crea un oggetto KeyGenerator

Il KeyGenerator classe fornisce getInstance() che accetta una variabile String che rappresenta l'algoritmo di generazione della chiave richiesto e restituisce un file KeyGenerator oggetto che genera chiavi segrete.

Creare KeyGenerator oggetto utilizzando il getInstance() metodo come mostrato di seguito.

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

Passaggio 2: crea l'oggetto SecureRandom

Il SecureRandom classe di java.SecurityIl pacchetto fornisce un potente generatore di numeri casuali che viene utilizzato per generare numeri casuali in Java. Istanziare questa classe come mostrato di seguito.

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

Passaggio 3: inizializza KeyGenerator

Il KeyGenerator class fornisce un metodo denominato init() questo metodo accetta il SecureRandom oggetto e inizializza la corrente KeyGenerator.

Inizializza l'oggetto KeyGenerator creato nel passaggio precedente utilizzando questo metodo.

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

Passaggio 4: genera la chiave

Genera la chiave usando generateKey() metodo del KeyGenerator classe come mostrato di seguito.

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

Passaggio 5: inizializza l'oggetto Mac

Il init() Il metodo della classe Mac accetta un oggetto Key e inizializza l'oggetto Mac corrente utilizzando la chiave specificata.

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

Passaggio 6: completare l'operazione Mac

Il doFinal()metodo della classe Mac viene utilizzato per completare l'operazione Mac. Passare i dati richiesti sotto forma di array di byte a questo metodo e completare l'operazione come mostrato di seguito.

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

Esempio

L'esempio seguente mostra la generazione del codice MAC (Message Authentication Code) utilizzando JCA. Qui, prendiamo un semplice messaggio "Ciao come stai" e generiamo un Mac per quel messaggio.

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

Produzione

Il programma precedente genererà il seguente output:

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