Java Cryptography - Giải mã dữ liệu

Bạn có thể giải mã dữ liệu được mã hóa bằng lớp Cipher của javax.cryptogói hàng. Làm theo các bước dưới đây để giải mã dữ liệu đã cho bằng Java.

Bước 1: Tạo đối tượng KeyPairGenerator

Các KeyPairGenerator lớp học cung cấp getInstance() phương thức chấp nhận một biến Chuỗi đại diện cho thuật toán tạo khóa bắt buộc và trả về một đối tượng KeyPairGenerator tạo khóa.

Tạo nên KeyPairGenerator đối tượng sử dụng getInstance() như hình dưới đây.

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

Bước 2: Khởi tạo đối tượng KeyPairGenerator

Các KeyPairGenerator lớp cung cấp một phương thức có tên initialize()phương pháp này được sử dụng để khởi tạo bộ tạo cặp khóa. Phương thức này chấp nhận một giá trị số nguyên đại diện cho kích thước khóa.

Khởi tạo đối tượng KeyPairGenerator đã tạo ở bước trước bằng cách sử dụng initialize() như hình dưới đây.

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

Bước 3: Tạo KeyPairGenerator

Bạn có thể tạo KeyPair sử dụng generateKeyPair() phương pháp của KeyPairGeneratorlớp học. Tạo cặp khóa bằng phương pháp này như hình dưới đây.

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

Bước 4: Lấy khóa công khai

Bạn có thể lấy khóa công khai từ đối tượng KeyPair đã tạo bằng cách sử dụng getPublic() như hình dưới đây.

//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();

Bước 5: Tạo một đối tượng Mật mã

Các getInstance() phương pháp của Cipher lớp chấp nhận một biến String đại diện cho phép biến đổi cần thiết và trả về một đối tượng Cipher thực hiện phép biến đổi đã cho.

Tạo đối tượng Mật mã bằng cách sử dụng getInstance() như hình dưới đây.

//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Bước 6: Khởi tạo đối tượng Cipher

Các init() phương thức của lớp Cipher chấp nhận hai tham số

  • Một tham số số nguyên đại diện cho chế độ hoạt động (mã hóa / giải mã)
  • Đối tượng khóa đại diện cho khóa công khai

Khởi tạo đối tượng Cypher bằng cách sử dụng init() như hình dưới đây.

//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);

Bước 7: Thêm dữ liệu vào đối tượng Mật mã

Các update() phương thức của lớp Cipher chấp nhận một mảng byte đại diện cho dữ liệu được mã hóa và cập nhật đối tượng hiện tại với dữ liệu đã cho.

Cập nhật đối tượng Mật mã đã khởi tạo bằng cách chuyển dữ liệu vào update() phương thức ở dạng mảng byte như hình dưới đây.

//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();	  
cipher.update(input);

Bước 8: Mã hóa dữ liệu

Các doFinal()phương thức của lớp Cipher hoàn thành thao tác mã hóa. Do đó, hãy kết thúc quá trình mã hóa bằng phương pháp này như hình dưới đây.

//Encrypting the data
byte[] cipherText = cipher.doFinal();

Bước 9: Khởi tạo đối tượng Cipher để giải mã

Để giải mã cypher được mã hóa trong các bước trước đó, bạn cần khởi tạo nó để giải mã.

Do đó, khởi tạo đối tượng mật mã bằng cách truyền các tham số Cipher.DECRYPT_MODE và đối tượng PrivateKey như hình dưới đây.

//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());

Bước 10: Giải mã dữ liệu

Cuối cùng, Giải mã văn bản được mã hóa bằng cách sử dụng doFinal() như hình dưới đây.

//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);

Thí dụ

Chương trình Java sau đây chấp nhận văn bản từ người dùng, mã hóa nó bằng thuật toán RSA và in mật mã của văn bản đã cho, giải mã mật mã và in lại văn bản đã giải mã.

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));
   }
}

Đầu ra

Chương trình trên tạo ra kết quả sau:

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