Вы можете создать цифровую подпись с помощью 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.
Создайте объект класса Signature с помощью метода getInstance () .
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
Шаг 6: Инициализируйте объект Signature
Метод initSign () класса Signature принимает объект PrivateKey и инициализирует текущий объект Signature.
Инициализируйте объект Signature, созданный на предыдущем шаге, используя метод initSign (), как показано ниже.
//Initialize the signature sign.initSign(privKey);
Шаг 7: Добавить данные в объект Signature
Метод update () класса Signature принимает байтовый массив, представляющий данные, которые должны быть подписаны или проверены, и обновляет текущий объект указанными данными.
Обновите инициализированный объект Signature, передав данные для подписи методу update () в виде байтового массива, как показано ниже.
byte[] bytes = "Hello how are you".getBytes(); //Adding data to the signature sign.update(bytes);
Шаг 8: Рассчитайте подпись
Метод sign () класса Signature возвращает байты подписи обновленных данных.
Рассчитайте Signature, используя метод sign (), как показано ниже.
//Calculating the signature byte[] signature = sign.sign();
Шаг 9: Инициализируйте объект подписи для проверки
Чтобы проверить объект Signature, вы должны сначала инициализировать его, используя метод initVerify (), метод которого принимает объект PublicKey .
Поэтому инициализируйте объект Signature для проверки с помощью метода initVerify (), как показано ниже.
//Initializing the signature sign.initVerify(pair.getPublic());
Шаг 10: Обновите данные для проверки
Обновите инициализированный (для проверки) объект данными, которые должны быть проверены с использованием метода обновления, как показано ниже.
//Update the data to be verified sign.update(bytes);
Шаг 11: Проверьте подпись
Метод verify () класса Signature принимает другой объект подписи и сверяет его с текущим. Если совпадение происходит, оно возвращает true, иначе возвращает false.
Проверьте подпись, используя этот метод, как показано ниже.
//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");
}
}
}