Как стать автором
Обновить

Криптография в Java. Класс Mac

Время на прочтение2 мин
Количество просмотров7.8K
Автор оригинала: Jakob Jenkov

Привет, Хабр! Представляю вашему вниманию перевод четвертой статьи "Java Mac" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.


Оглавление:


  1. Java Cryptography
  2. Java Cipher
  3. MessageDigest
  4. Mac
  5. Signature
  6. KeyPair
  7. KeyGenerator
  8. KeyPairGenerator
  9. KeyStore
  10. Keytool
  11. Certificate
  12. CertificateFactory
  13. CertPath

Message Authentication Code (MAC) (Код аутентификации сообщения или имитовставка)


Java Mac (javax.crypto.Mac) создает код аутентификации сообщений (MAC) из двоичных данных. MAC — это дайджест сообщения, зашифрованный секретным ключом. Только при наличии секретного ключа вы сможете проверить подлинность MAC.


Создание экземпляра


Прежде чем использовать класс Mac, необходимо создать экземпляр Mac. Создание экземпляра класса Mac выполняется с помощью метода getInstance(). Вот пример создания экземпляра Mac:


Mac mac = Mac.getInstance("HmacSHA256");

Строковый параметр, передаваемый методу getInstance(), содержит имя используемого алгоритма. В этом случае используется алгоритм HmacSHA256.


Инициализация


После создания экземпляра, Mac должен быть инициализирован. Экземпляр Mac инициализируется вызывом метода init(), передавая в качестве параметра секретный ключ, который будет использоваться экземпляром. Вот пример инициализации экземпляра Mac:


byte[] keyBytes   = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15};

String algorithm  = "RawBytes";
SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm);

mac.init(key);

Метод init() принимает экземпляр Key. В этом примере используется SecretKeySpec, который реализует интерфейс Key.


Вычисление MAC


При помощи экземпляра MAC(после инициализации) можно начать вычислять MAC данных. Чтобы вычислить значение MAC, вы вызываете метод update() или doFinal(). Если у вас есть только один блок данных для вычисления MAC, вы можете напрямую вызвать doFinal(), например:


byte[] data  = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
byte[] macBytes = mac.doFinal(data);

Если у вас есть несколько блоков данных для расчета MAC, например, если вы читаете файл блок за блоком, то вы должны вызывать метод update() для каждого блока и заканчивать вызовом doFinal() на последнем блоке. Вот пример:


byte[] data  = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
byte[] data2 = "0123456789".getBytes("UTF-8");

mac.update(data);
mac.update(data2);

byte[] macBytes = mac.doFinal();
Теги:
Хабы:
Всего голосов 13: ↑12 и ↓1+11
Комментарии1

Публикации

Истории

Работа

Java разработчик
394 вакансии

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн