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

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

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

Привет, Хабр! Представляю вашему вниманию перевод пятой статьи "Java Signature" автора 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

Java Signature (Подпись)


Класс Signature (java.security.Signature) создает цифровую подпись для двоичных данных. Цифровая подпись — это дайджест сообщения, зашифрованный закрытым ключом от пары закрытый / открытый ключ. Любой, кто владеет открытым ключом, может проверить цифровую подпись.


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


Прежде чем вы сможете использовать класс Signature, вы должны создать экземпляр этого класса, вызовом статического метода getInstance(). Ниже пример, в котором создается экземпляр Signature:


Signature signature = Signature.getInstance("SHA256WithDSA");

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


Инициализация экземпляра подписи


После создания экземпляра Signature вам необходимо инициализировать его, перед тем как начать использовать его. Экземпляр Signature инициализируется вызывом его метода init(). Пример инициализации экземпляра подписи Java:


SecureRandom secureRandom = new SecureRandom();
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DSA");
KeyPair keyPair = keyPairGenerator.generateKeyPair();

signature.initSign(keyPair.getPrivate(), secureRandom);

Как видите, экземпляр Signature инициализируется закрытым ключом пары секретный / открытый ключ и экземпляром SecureRandom.


Создание цифровой подписи


Когда экземпляр Signature инициализирован, вы можете использовать его для создания цифровых подписей. Цифровая подпись создается вызывом метода update() (один или несколько раз) и заканчивая вызовом sign(). Пример создания цифровой подписи для двоичных данных:


byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
signature.update(data);

byte[] digitalSignature = signature.sign();

Проверка цифровой подписи


Если вы хотите проверить цифровую подпись, созданную кем-то другим, вы должны инициализировать экземпляр подписи в режиме проверки (вместо режима подписи). Вот как выглядит инициализация экземпляра Signature в режиме проверки:


Signature signature = Signature.getInstance("SHA256WithDSA");

signature.initVerify(keyPair.getPublic());

Обратите внимание, что экземпляр Signature теперь инициализируется в режиме проверки, передавая открытый ключ от пары ключей в качестве параметра. После инициализации в режиме проверки вы можете использовать экземпляр Signature для проверки цифровой подписи:


byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
signature2.update(data2);

boolean verified = signature2.verify(digitalSignature);
Теги:
Хабы:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Публикации

Истории

Работа

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

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

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область