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

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