RSA (Rivest–Shamir–Adleman) হল একটি asymmetric encryption এলগোরিদম যা পাবলিক কী (public key) এবং প্রাইভেট কী (private key) ব্যবহার করে ডেটাকে এনক্রিপ্ট এবং ডিক্রিপ্ট করে। RSA এনক্রিপশন একটি খুব জনপ্রিয় এলগোরিদম এবং এটি মূলত ডেটা সুরক্ষা, ডিজিটাল সিগনেচার এবং নিরাপদ কমিউনিকেশন এর জন্য ব্যবহৃত হয়।
RSA Encryption-এ দুটি কী থাকে:
- পাবলিক কী (Public Key): এটি সকলের জন্য উন্মুক্ত থাকে এবং ডেটা এনক্রিপ্ট করতে ব্যবহৃত হয়।
- প্রাইভেট কী (Private Key): এটি গোপন থাকে এবং ডেটা ডিক্রিপ্ট করতে ব্যবহৃত হয়।
RSA এনক্রিপশন সাধারণত বড় ডেটার জন্য ব্যবহার করা হয়, তবে সিমেট্রিক এনক্রিপশন (যেমন AES) আরও দ্রুত, তাই সাধারণত বড় ডেটা এনক্রিপ্ট করতে সিমেট্রিক এনক্রিপশন ব্যবহার করা হয়, আর RSA দিয়ে কী এক্সচেঞ্জ করা হয়।
Java তে RSA Encryption এবং Decryption উদাহরণ
Java তে RSA এনক্রিপশন এবং ডিক্রিপশন করতে Java Cryptography API (JCA) ব্যবহার করা হয়। নিচে RSA এনক্রিপশন এবং ডিক্রিপশনের একটি উদাহরণ দেওয়া হল:
ধাপ ১: RSA কী জেনারেশন
RSA কী জেনারেট করতে KeyPairGenerator ব্যবহার করা হয়।
ধাপ ২: RSA এনক্রিপশন এবং ডিক্রিপশন
এখানে আমরা RSA এনক্রিপশন এবং ডিক্রিপশন দুটি কাজ দেখাবো:
import java.security.*;
import javax.crypto.Cipher;
import java.util.Base64;
public class RSAExample {
// RSA Encryption
public static String encrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData); // Encode the encrypted data as a String
}
// RSA Decryption
public static String decrypt(String encryptedData, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decodedData = Base64.getDecoder().decode(encryptedData); // Decode the Base64 encoded data
byte[] decryptedData = cipher.doFinal(decodedData);
return new String(decryptedData);
}
public static void main(String[] args) throws Exception {
// Step 1: Generate RSA Key Pair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048-bit key size
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Get public and private keys
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// Original data to be encrypted
String data = "Hello, this is a test message!";
// Step 2: Encrypt the data using the public key
String encryptedData = encrypt(data, publicKey);
System.out.println("Encrypted data: " + encryptedData);
// Step 3: Decrypt the data using the private key
String decryptedData = decrypt(encryptedData, privateKey);
System.out.println("Decrypted data: " + decryptedData);
}
}
ব্যাখ্যা:
- KeyPairGenerator: এই ক্লাস RSA কী জেনারেট করতে ব্যবহৃত হয়। এখানে 2048-বিট কী সাইজ ব্যবহার করা হয়েছে।
- Cipher: এটি ক্রিপটোগ্রাফিক এনক্রিপশন এবং ডিক্রিপশন অপারেশন করার জন্য ব্যবহৃত হয়।
RSAএলগোরিদম ব্যবহার করা হয়েছে। - Base64 Encoding: এনক্রিপ্ট করা ডেটাকে পাঠযোগ্য স্ট্রিং ফরম্যাটে রূপান্তর করতে Base64 এনকোডিং ব্যবহার করা হয়েছে, কারণ এনক্রিপ্ট করা ডেটা সাধারণত বাইনারি হয়, যা পাঠযোগ্য নয়।
- Encrypt: পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা হয়েছে।
- Decrypt: প্রাইভেট কী দিয়ে এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করা হয়েছে।
Output:
Encrypted data: NnA54gYZhP0RZlQjB2Ug5u9m56bx7bw2Kqlx+WzP88bdkOszF3jdC4bgqH8Yh7z8u2o+hMGY93fW4d3tM7YwC5eT6IzdtMfAKwwGBvjcgyZ3T6fw7lFyJ0JpvqY0HEp9a4xHM6gxd22bV9cVffwZalPY2fz1A2uWyj9Ap25gO3Yn7WyEHGigk8NoP0P6nkUyhV4CBL3lCx32Ekau1hQ==
Decrypted data: Hello, this is a test message!
এখানে:
- Original Data:
"Hello, this is a test message!"ছিল। - Encrypted Data: এটি এনক্রিপ্ট করা ডেটা, যা
Base64এনকোডিং এর মাধ্যমে পাঠযোগ্য স্ট্রিং আকারে রূপান্তরিত করা হয়েছে। - Decrypted Data: ডিক্রিপশন করার পর, আবার মূল ডেটা ফিরে এসেছে।
RSA Encryption এবং Decryption এর সুবিধা
- Public-Key Cryptography:
- RSA হল একটি asymmetric encryption প্রযুক্তি, যার ফলে পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা হয় এবং প্রাইভেট কী দিয়ে ডিক্রিপ্ট করা হয়। এটি কী বিতরণের জন্য নিরাপদ এবং সহজ।
- Secure Communication:
- RSA ব্যবহার করে দুটি পক্ষের মধ্যে নিরাপদ যোগাযোগ নিশ্চিত করা যায়, যেখানে একটি পক্ষ পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করে, এবং অপর পক্ষ প্রাইভেট কী দিয়ে তা ডিক্রিপ্ট করে।
- Digital Signatures:
- RSA প্রাইভেট কী দিয়ে ডিজিটাল সিগনেচার তৈরি করতে ব্যবহৃত হয়, যা ডেটার অখণ্ডতা এবং আসলত্ব নিশ্চিত করে।
- Confidentiality and Integrity:
- RSA এনক্রিপশন নিশ্চিত করে ডেটার গোপনীয়তা (Confidentiality) এবং ডিজিটাল সিগনেচার নিশ্চিত করে ডেটার অখণ্ডতা (Integrity)।
RSA এনক্রিপশন হল একটি শক্তিশালী asymmetric encryption প্রযুক্তি যা ডেটার গোপনীয়তা এবং অখণ্ডতা রক্ষা করতে ব্যবহৃত হয়। Java Cryptography API ব্যবহার করে RSA এনক্রিপশন এবং ডিক্রিপশন প্রক্রিয়া সহজেই বাস্তবায়ন করা যায়। এটি বিভিন্ন নিরাপত্তা প্রক্রিয়া যেমন ডিজিটাল সিগনেচার এবং নিরাপদ ডেটা ট্রান্সফারের জন্য অত্যন্ত উপকারী।
Read more