RSA là một trong những thuật toán mã hóa khóa công khai được sử dụng rộng rãi trong bảo mật thông tin. Trong Java, để sử dụng RSA, ta có thể sử dụng package java.security
và javax.crypto
.
Để tạo một cặp khóa RSA, ta có thể sử dụng lớp KeyPairGenerator
trong package java.security
như sau:
import java.security.*;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Tạo một đối tượng KeyPairGenerator với thuật toán RSA
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// Thiết lập độ dài khóa
keyPairGenerator.initialize(2048);
// Tạo một cặp khóa RSA
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Lấy khóa công khai
PublicKey publicKey = keyPair.getPublic();
// Lấy khóa bí mật
PrivateKey privateKey = keyPair.getPrivate();
}
}
Sau khi có cặp khóa, ta có thể sử dụng chúng để mã hóa và giải mã dữ liệu. Ví dụ, để mã hóa dữ liệu với khóa công khai, ta có thể sử dụng lớp Cipher
trong package javax.crypto
như sau:
import java.security.*;
import javax.crypto.*;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Tạo cặp khóa RSA và lấy khóa công khai
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
// Tạo đối tượng Cipher với thuật toán RSA/ECB/PKCS1Padding
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Thiết lập Cipher để mã hóa với khóa công khai
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// Dữ liệu cần mã hóa
byte[] data = "Hello world".getBytes("UTF-8");
// Mã hóa dữ liệu
byte[] encryptedData = cipher.doFinal(data);
}
}
Và để giải mã dữ liệu với khóa bí mật, ta cũng sử dụng lớp Cipher
và thiết lập Cipher để giải mã với khóa bí mật như sau:
import java.security.*;
import javax.crypto.*;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Tạo cặp khóa RSA và lấy khóa bí mật
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
// Tạo đối tượng Cipher với thuật toán RSA/ECB/PKCS1Padding
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Thiết lập Cipher để giải mã với khóa bí mật
cipher.init(Cipher.DECRYPT_MODE, privateKey);
// Giải mã dữ liệu đã được mã hóa
byte[] decryptedData = cipher.doFinal(encryptedData);
String decryptedText = new String(decryptedData, "UTF-8");
System.out.println(decryptedText);
}
}
Trong ví dụ trên, ta sử dụng thuật toán RSA với độ dài khóa là 2048 bit và mode là ECB (Electronic Code Book) và padding là PKCS1Padding. Ta có thể sử dụng các thuật toán khác nhưng cần lưu ý rằng một số thuật toán sử dụng độ dài khóa ngắn hơn sẽ không đảm bảo tính an toàn của dữ liệu. Do đó, ta nên sử dụng các thuật toán mã hóa khác nhau tùy thuộc vào mức độ bảo mật cần thiết cho dữ liệu của mình.