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


Оглавление:


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

Java MessageDigest (Дайджест сообщения)


Класс Java MessageDigest представляет криптографическую хеш-функцию, которая может вычислять дайджест сообщения из двоичных данных. Когда вы получаете набор зашифрованных данных, вы не можете быть уверены в том, что он не был изменен во время транспортировки. Дайджест сообщения помогает решить эту проблему.


Чтобы определить, были ли зашифрованные данные модифицированы при транспортировке, отправитель должен рассчитать дайджест сообщения из данных и отправить его вместе с данными. Другая сторона получая зашифрованные данные и дайджест сообщения, может пересчитать дайджест сообщения из данных и проверить, соответствует ли вычисленный дайджест сообщения дайджесту сообщения, полученному с данными. Если два дайджеста сообщения совпадают, существует вероятность того, что зашифрованные данные не были изменены во время транспортировки.


Есть несколько условий, которые должны быть выполнены, чтобы дайджест сообщения был полезен в качестве механизма обнаружения изменений. Однако точные условия являются частью криптографической теории которая не рассматривается в данной статье, а только объясняет, как использовать Java для получения дайджеста сообщения в классе MessageDigest.


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


Для создания экземпляра класса MessageDigest, вызывается статический метод getInstance() класса MessageDigest. Вот пример создания экземпляра MessageDigest:


MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");

Строковый параметр, передаваемый методу getInstance(), определяет используемый алгоритм дайджеста конкретного сообщения.


Алгоритмы дайджеста сообщения


Java Cryptography API поддерживает следующие алгоритмы дайджеста сообщений (внешние поставщики криптографии могут поддерживать больше):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

Не все эти алгоритмы одинаково безопасны. На момент написания статьи рекомендуется использовать SHA-256 или выше, чтобы получить максимально возможный уровень безопасности.


Вычисление дайджеста сообщения


Создав экземпляр MessageDigest, можно использовать его для расчета дайджеста сообщения. Если у вас есть один блок данных для расчета дайджеста сообщения, используйте метод digest(). Вот как выглядит вычисление дайджеста сообщения из одного блока данных:


byte[] data1 = "0123456789".getBytes("UTF-8");

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] digest = messageDigest.digest(data1);

Если есть несколько блоков данных для включения в один и тот же дайджест сообщения, вызовите метод update() и завершите вызовом digest(). Вот как выглядит вычисление дайджеста сообщения из нескольких блоков данных:


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

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(data1);
messageDigest.update(data2);

byte[] digest = messageDigest.digest();

Комментарии (0)