Учебники

Криптография 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 принимает переменную 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));
   }
}

Выход

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