Криптография Java - Расшифровка данных
Вы можете расшифровать зашифрованные данные, используя класс 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 class принимает переменную 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 object, как показано ниже.
//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));
}
}
Вывод
Вышеупомянутая программа генерирует следующий вывод -
Encrypted Text:
]/[?F3?D?p
v?w?!?H???^?A??????P?u??FA?
?
???_?? ???_jMH-??>??OP?'?j?_?n`
?_??'`????o??_GL??g???g_f?????f|???LT?|?Vz_TDu#??\?<b,,?$C2???Bq?#?lDB`??g,^??K?_?v???`}
?;LX?a?_5e???#???_?6?/B&B_???^?__Ap^#_?q?IEh????_?,??*??]~_?_?D?
_y???lp??a?P_U{
Decrypted Text:
Welcome to Tutorialspoint