Thuật toán RSA là một thuật toán mã hóa/asymmetric encryption phổ biến và mạnh mẽ được sử dụng để bảo mật thông tin trong các ứng dụng mạng và hệ thống mã hóa.
RSA là viết tắt của ba nhà toán học Rivest, Shamir và Adleman – những người đã phát triển thuật toán này vào năm 1977. RSA dựa trên một bài toán số học phức tạp, gọi là “bài toán phân tích nguyên tố”, nơi việc tìm các thừa số nguyên tố của một số rất lớn trở nên rất khó khăn.
Thuật toán RSA sử dụng cặp khóa, gồm khóa công khai (public key) và khóa riêng (private key). Khóa công khai được chia sẻ rộng rãi và dùng để mã hóa dữ liệu, trong khi khóa riêng được giữ bí mật và chỉ được sử dụng để giải mã dữ liệu.
Quá trình mã hóa trong RSA thực hiện như sau:
- Một người gửi sử dụng khóa công khai của người nhận để mã hóa dữ liệu.
- Người nhận sử dụng khóa riêng của mình để giải mã dữ liệu.
Quá trình này đảm bảo rằng chỉ có người nhận với khóa riêng tương ứng mới có thể giải mã dữ liệu đã được mã hóa bằng khóa công khai.
RSA được sử dụng rộng rãi trong việc bảo mật thông tin, chẳng hạn như giao tiếp an toàn qua mạng, chứng thực, chữ ký điện tử và các ứng dụng mã hóa dữ liệu khác.
Dưới đây là một ví dụ về cách sử dụng thuật toán RSA trong Java để mã hóa và giải mã dữ liệu:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import javax.crypto.Cipher;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Khởi tạo cặp khóa RSA
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Dữ liệu cần được mã hóa
String plainText = "Hello, RSA!";
// Mã hóa dữ liệu bằng khóa công khai
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
// Giải mã dữ liệu bằng khóa riêng
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
// In kết quả
System.out.println("Dữ liệu gốc: " + plainText);
System.out.println("Dữ liệu đã mã hóa: " + new String(encryptedBytes));
System.out.println("Dữ liệu đã giải mã: " + new String(decryptedBytes));
}
}
Trong ví dụ này, chúng ta sử dụng lớp KeyPairGenerator
để tạo cặp khóa RSA với kích thước 2048 bit. Sau đó, chúng ta sử dụng khóa công khai để mã hóa dữ liệu và khóa riêng để giải mã dữ liệu. Kết quả được in ra màn hình.
Lưu ý rằng để sử dụng thuật toán RSA trong Java, bạn cần import các thư viện bổ sung như java.security
và javax.crypto
.