Вы можете создать цифровую подпись с помощью 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"); } } }
Выход
Вышеуказанная программа генерирует следующий вывод —