Криптография Java - проверка подписи

Вы можете создать цифровую подпись с помощью Java и проверить ее, выполнив шаги, указанные ниже.

Шаг 1. Создайте объект KeyPairGenerator

В KeyPairGenerator класс обеспечивает getInstance() , который принимает переменную String, представляющую требуемый алгоритм генерации ключей, и возвращает объект KeyPairGenerator, который генерирует ключи.

Создайте KeyPairGenerator объект с помощью getInstance() метод, как показано ниже.

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

Шаг 2. Инициализируйте объект KeyPairGenerator

В KeyPairGenerator класс предоставляет метод с именем initialize()метод. Этот метод используется для инициализации генератора пары ключей. Этот метод принимает целочисленное значение, представляющее размер ключа.

Инициализируйте объект KeyPairGenerator, созданный на предыдущем шаге, используя initialize() метод, как показано ниже.

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

Шаг 3. Создайте KeyPairGenerator

Вы можете создать KeyPair используя generateKeyPair()метод. Создайте пару ключей, используя этот метод, как показано ниже.

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

Шаг 4: получите закрытый ключ от пары

Вы можете получить закрытый ключ из сгенерированного объекта KeyPair, используя getPrivate() метод.

Получите закрытый ключ, используя getPrivate() метод, как показано ниже.

//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();

Шаг 5. Создайте объект подписи

В getInstance() метод Signature Класс принимает строковый параметр, представляющий требуемый алгоритм подписи, и возвращает соответствующий объект подписи.

Создайте объект класса Signature с помощью getInstance() метод.

//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");

Шаг 6. Инициализируйте объект подписи

В initSign() метод класса Signature принимает PrivateKey объект и инициализирует текущий объект подписи.

Инициализируйте объект подписи, созданный на предыдущем шаге, используя initSign() метод, как показано ниже.

//Initialize the signature
sign.initSign(privKey);

Шаг 7. Добавьте данные в объект подписи

В update() Метод класса Signature принимает байтовый массив, представляющий данные, которые должны быть подписаны или проверены, и обновляет текущий объект заданными данными.

Обновите инициализированный объект подписи, передав данные для подписи в update() в виде байтового массива, как показано ниже.

byte[] bytes = "Hello how are you".getBytes();      

//Adding data to the signature
sign.update(bytes);

Шаг 8: Рассчитайте подпись

В sign() метод Signature Класс возвращает байты подписи обновленных данных.

Рассчитайте подпись, используя метод sign (), как показано ниже.

//Calculating the signature
byte[] signature = sign.sign();

Шаг 9. Инициализируйте объект подписи для проверки

Чтобы проверить объект подписи, вам необходимо сначала инициализировать его, используя initVerify() метод метод принимает PublicKey объект.

Поэтому инициализируйте объект Signature для проверки с помощью initVerify() метод, как показано ниже.

//Initializing the signature
sign.initVerify(pair.getPublic());

Шаг 10. Обновите данные для проверки

Обновите инициализированный (для проверки) объект данными, которые необходимо проверить, используя метод обновления, как показано ниже.

//Update the data to be verified
sign.update(bytes);

Шаг 11: проверьте подпись

В verify()Метод класса Signature принимает другой объект подписи и сверяет его с текущим. Если совпадение происходит, возвращается истина, иначе возвращается ложь.

Проверьте подпись, используя этот метод, как показано ниже.

//Verify the signature
boolean bool = sign.verify(signature);

пример

Следующая программа на Java принимает сообщение от пользователя, генерирует цифровую подпись для данного сообщения и проверяет ее.

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Signature;

import java.util.Scanner;

public class SignatureVerification {
   public static void main(String args[]) throws Exception{
      //Creating KeyPair generator object
      KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
	      
      //Initializing the key pair generator
      keyPairGen.initialize(2048);
	      
      //Generate the pair of keys
      KeyPair pair = keyPairGen.generateKeyPair();
      
      //Getting the privatekey from the key pair
      PrivateKey privKey = pair.getPrivate();

      //Creating a Signature object
      Signature sign = Signature.getInstance("SHA256withDSA");

      //Initializing the signature
      sign.initSign(privKey);
      byte[] bytes = "Hello how are you".getBytes();
      
      //Adding data to the signature
      sign.update(bytes);
      
      //Calculating the signature
      byte[] signature = sign.sign();      
      
      //Initializing the signature
      sign.initVerify(pair.getPublic());
      sign.update(bytes);
      
      //Verifying the signature
      boolean bool = sign.verify(signature);
      
      if(bool) {
         System.out.println("Signature verified");   
      } else {
         System.out.println("Signature failed");
      }
   }
}

Вывод

Вышеупомянутая программа генерирует следующий вывод -

Signature verified