Учебники

Криптография Java — Создание MAC

Алгоритм MAC (Message A uthentication Code) — это криптографический метод с симметричным ключом, обеспечивающий аутентификацию сообщения. Для установления процесса MAC отправитель и получатель совместно используют симметричный ключ K.

По сути, MAC — это зашифрованная контрольная сумма, сгенерированная для базового сообщения, которое отправляется вместе с сообщением для обеспечения аутентификации сообщения.

Процесс использования MAC для аутентификации изображен на следующей иллюстрации —

Создание MAC

В Java класс Mac пакета javax.crypto обеспечивает функциональность кода аутентификации сообщений. Следуйте приведенным ниже инструкциям, чтобы создать код аутентификации сообщения с использованием этого класса.

Шаг 1. Создайте объект KeyGenerator

Класс KeyGenerator предоставляет метод getInstance (), который принимает переменную String, представляющую требуемый алгоритм генерации ключей, и возвращает объект KeyGenerator, который генерирует секретные ключи.

Создайте объект KeyGenerator, используя метод getInstance (), как показано ниже.

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

Шаг 2: Создайте объект SecureRandom

Класс SecureRandom пакета java.Security предоставляет мощный генератор случайных чисел, который используется для генерации случайных чисел в Java. Создайте этот класс, как показано ниже.

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

Шаг 3: Инициализируйте KeyGenerator

Класс KeyGenerator предоставляет метод с именем init (), этот метод принимает объект SecureRandom и инициализирует текущий KeyGenerator .

С помощью этого метода инициализируйте объект KeyGenerator, созданный на предыдущем шаге.

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

Шаг 4: Генерация ключа

Сгенерируйте ключ с помощью метода generateKey () класса KeyGenerator, как показано ниже.

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

Шаг 5: Инициализируйте объект Mac

Метод init () класса Mac принимает объект Key и инициализирует текущий объект Mac, используя заданный ключ.

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

Шаг 6: Завершите операцию Mac

Метод doFinal () класса Mac используется для завершения операции Mac. Передайте в этот метод необходимые данные в виде байтового массива и завершите операцию, как показано ниже.

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

пример

В следующем примере демонстрируется генерация кода аутентификации сообщений (MAC) с использованием JCA. Здесь мы берем простое сообщение «Привет, как дела» и генерируем Mac для этого сообщения.

Live Demo

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

Выход

Вышеуказанная программа сгенерирует следующий вывод —