Учебники

Криптография 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 принимает два параметра: целочисленный параметр, представляющий режим работы (шифрование / дешифрование), и объект Key, представляющий открытый ключ.

Инициализируйте объект 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();

пример

Следующая Java-программа принимает текст от пользователя, шифрует его с помощью алгоритма RSA и печатает зашифрованный формат данного текста.

Live Demo

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;

public class CipherSample {
   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);
      
      //Generating the pair of keys
      KeyPair pair = keyPairGen.generateKeyPair();      
	
      //Creating a Cipher object
      Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        
      //Initializing a Cipher object
      cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic());
	  
      //Adding 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"));
   }
}

Выход

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