Алгоритм MAC (Message A uthentication Code) — это криптографический метод с симметричным ключом, обеспечивающий аутентификацию сообщения. Для установления процесса MAC отправитель и получатель совместно используют симметричный ключ K.
По сути, 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 для этого сообщения.
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)); } }
Выход
Вышеуказанная программа сгенерирует следующий вывод —