Вы можете расшифровать зашифрованные данные, используя класс Cipher пакета javax.crypto . Следуйте инструкциям ниже, чтобы расшифровать данные с помощью 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 () класса KeyPairGenerator . Сгенерируйте пару ключей, используя этот метод, как показано ниже.
//Generate the pair of keys KeyPair pair = keyPairGen.generateKeyPair();
Шаг 4: Получить открытый ключ
Вы можете получить открытый ключ из сгенерированного объекта KeyPair, используя метод getPublic (), как показано ниже.
//Getting the public key from the key pair PublicKey publicKey = pair.getPublic();
Шаг 5: Создайте объект Cipher
Метод getInstance () класса Cipher принимает переменную String, представляющую требуемое преобразование, и возвращает объект Cipher, который реализует данное преобразование.
Создайте объект Cipher, используя метод getInstance (), как показано ниже.
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Шаг 6: Инициализировать объект Cipher
Метод init () класса Cipher принимает два параметра
- Целочисленный параметр, представляющий режим работы (шифрование / дешифрование)
- Ключевой объект, представляющий открытый ключ
Инициализируйте объект Cypher, используя метод init (), как показано ниже.
//Initializing a Cipher object cipher.init(Cipher.ENCRYPT_MODE, publicKey);
Шаг 7: Добавить данные в объект Cipher
Метод update () класса Cipher принимает массив байтов, представляющий данные, которые должны быть зашифрованы, и обновляет текущий объект данными.
Обновите инициализированный объект Cipher, передав данные методу update () в виде байтового массива, как показано ниже.
//Adding data to the cipher byte[] input = "Welcome to Tutorialspoint".getBytes(); cipher.update(input);
Шаг 8: Шифровать данные
Метод doFinal () класса Cipher завершает операцию шифрования. Поэтому завершите шифрование, используя этот метод, как показано ниже.
//Encrypting the data byte[] cipherText = cipher.doFinal();
Шаг 9: Инициализировать объект Cipher для расшифровки
Чтобы расшифровать шифр, зашифрованный на предыдущих шагах, вам нужно инициализировать его для дешифрования.
Поэтому инициализируйте объект шифрования, передав параметры Cipher.DECRYPT_MODE и объект PrivateKey, как показано ниже.
//Initializing the same cipher for decryption cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
Шаг 10: Расшифровать данные
Наконец, расшифруйте зашифрованный текст, используя метод doFinal (), как показано ниже.
//Decrypting the text byte[] decipheredText = cipher.doFinal(cipherText);
пример
Следующая Java-программа принимает текст от пользователя, шифрует его с использованием алгоритма RSA и, печатает шифр данного текста, дешифрует шифр и снова печатает дешифрованный текст.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.Cipher;
public class CipherDecrypt {
public static void main(String args[]) throws Exception{
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withRSA");
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//Add data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
//encrypting the data
byte[] cipherText = cipher.doFinal();
System.out.println( new String(cipherText, "UTF8"));
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
System.out.println(new String(decipheredText));
}
}