Java Cryptography - Mã hóa dữ liệu

Bạn có thể mã hóa dữ liệu đã cho bằng lớp Cipher của javax.cryptogói hàng. Làm theo các bước dưới đây để mã hóa 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ừ KeyPair đối tượng sử dụng getPublic() như hình dưới đây.

Lấy khóa công khai bằng phương pháp này 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 pháp của Cipher lớp chấp nhận hai tham số một tham số nguyên đại diện cho chế độ hoạt động (mã hóa / giải mã) và, một đố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();

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 ra định dạng được mã hóa của văn bản đã cho.

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

Đầu ra

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

Encrypted Text: 
"???:]J_?]???;Xl??????*@??u???r??=T&???_?_??.??i?????(?$_f?zD??????ZGH??g???
g?E:_??bz^??f?~o???t?}??u=uzp\UI????Z??l[?G?3??Y?UAEfKT?f?O??N_?d__?????a_?15%?^?
'p?_?$,9"{??^??y??_?t???,?W?PCW??~??[?$??????e????f?Y-Zi__??_??w?_?&QT??`?`~?[?K_??_???