Cryptographie Java - Création d'un MAC

MAC (Message Authentication Code) est une technique cryptographique à clé symétrique pour fournir une authentification de message. Pour établir le processus MAC, l'expéditeur et le destinataire partagent une clé symétrique K.

Essentiellement, un MAC est une somme de contrôle chiffrée générée sur le message sous-jacent qui est envoyé avec un message pour garantir l'authentification du message.

Le processus d'utilisation de MAC pour l'authentification est décrit dans l'illustration suivante:

À Java, le Mac classe de la javax.cryptopackage fournit la fonctionnalité du code d'authentification de message. Suivez les étapes ci-dessous pour créer un code d'authentification de message à l'aide de cette classe.

Étape 1: créer un objet KeyGenerator

le KeyGenerator classe fournit getInstance() qui accepte une variable String représentant l'algorithme de génération de clé requis et renvoie un KeyGenerator objet qui génère des clés secrètes.

Créer KeyGenerator objet utilisant le getInstance() méthode comme indiqué ci-dessous.

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

Étape 2: créer un objet SecureRandom

le SecureRandom classe de la java.SecurityLe package fournit un puissant générateur de nombres aléatoires qui est utilisé pour générer des nombres aléatoires en Java. Instanciez cette classe comme indiqué ci-dessous.

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

Étape 3: initialiser le KeyGenerator

le KeyGenerator classe fournit une méthode nommée init() cette méthode accepte le SecureRandom objet et initialise le courant KeyGenerator.

Initialisez l'objet KeyGenerator créé à l'étape précédente à l'aide de cette méthode.

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

Étape 4: générer la clé

Générer la clé en utilisant generateKey() méthode de la KeyGenerator classe comme indiqué ci-dessous.

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

Étape 5: Initialisez l'objet Mac

le init() La méthode de la classe Mac accepte un objet Key et initialise l'objet Mac actuel à l'aide de la clé donnée.

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

Étape 6: Terminez l'opération Mac

le doFinal()La méthode de la classe Mac est utilisée pour terminer l'opération Mac. Passez les données requises sous forme de tableau d'octets à cette méthode et terminez l'opération comme indiqué ci-dessous.

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

Exemple

L'exemple suivant illustre la génération du code d'authentification de message (MAC) à l'aide de JCA. Ici, nous prenons un simple message "Salut, comment allez-vous" et générons un Mac pour ce message.

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

Production

Le programme ci-dessus générera la sortie suivante -

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