Java-তে Encryption এবং Decryption বিভিন্ন পদ্ধতি ব্যবহার করে করা যেতে পারে। দুটি প্রধান পদ্ধতি হলো:
- Symmetric Key Encryption: যেখানে একই কিপর্যন্ত এনক্রিপশন এবং ডিক্রিপশন উভয়ের জন্য একটি সাধারণ কী ব্যবহার করা হয়।
- Asymmetric Key Encryption: যেখানে দুটি কী ব্যবহৃত হয়, একটি পাবলিক কী (Encryption এর জন্য) এবং একটি প্রাইভেট কী (Decryption এর জন্য)।
এখানে আমি দুটি উদাহরণ দেখাবো—একটি Symmetric Key Encryption এবং একটি Asymmetric Key Encryption।
1. Symmetric Key Encryption (AES)
এখানে AES (Advanced Encryption Standard) ব্যবহার করা হয়েছে, যা একটি জনপ্রিয় symmetric encryption অ্যালগরিদম। এখানে একই কী ব্যবহার করে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়।
Symmetric Encryption Example (AES)
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class SymmetricEncryptionExample {
public static void main(String[] args) throws Exception {
// এনক্রিপশনের জন্য SecretKey তৈরি
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 128-bit AES key
SecretKey secretKey = keyGenerator.generateKey();
// ডেটা এনক্রিপশন
String data = "This is a secret message.";
String encryptedData = encrypt(data, secretKey);
System.out.println("Encrypted Data: " + encryptedData);
// ডেটা ডিক্রিপশন
String decryptedData = decrypt(encryptedData, secretKey);
System.out.println("Decrypted Data: " + decryptedData);
}
// এনক্রিপ্ট করার মেথড
public static String encrypt(String data, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
}
// ডিক্রিপ্ট করার মেথড
public static String decrypt(String encryptedData, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
byte[] decryptedData = cipher.doFinal(decodedBytes);
return new String(decryptedData);
}
}
ব্যাখ্যা:
- SecretKey: এনক্রিপশন এবং ডিক্রিপশন উভয়ের জন্য একটি সাধারণ সিক্রেট কী ব্যবহৃত হয়।
- Cipher.getInstance("AES"): AES অ্যালগরিদমের মাধ্যমে এনক্রিপশন/ডিক্রিপশন অপারেশনটি করা হয়।
- Base64: এনক্রিপ্টেড ডেটাকে স্ট্রিং ফরম্যাটে রূপান্তর করার জন্য Base64 ব্যবহার করা হয়।
2. Asymmetric Key Encryption (RSA)
এখানে RSA অ্যালগরিদম ব্যবহার করা হয়েছে, যা একটি asymmetric encryption পদ্ধতি, যেখানে দুটি কী ব্যবহৃত হয়—একটি পাবলিক কী (এনক্রিপ্ট করার জন্য) এবং একটি প্রাইভেট কী (ডিক্রিপ্ট করার জন্য)।
Asymmetric Encryption Example (RSA)
import java.security.*;
import javax.crypto.Cipher;
import java.util.Base64;
public class AsymmetricEncryptionExample {
public static void main(String[] args) throws Exception {
// RSA কী পেয়ার তৈরি করা
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048-bit RSA key pair
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// ডেটা এনক্রিপশন
String data = "This is a secret message with RSA!";
String encryptedData = encrypt(data, publicKey);
System.out.println("Encrypted Data: " + encryptedData);
// ডেটা ডিক্রিপশন
String decryptedData = decrypt(encryptedData, privateKey);
System.out.println("Decrypted Data: " + decryptedData);
}
// পাবলিক কী দিয়ে এনক্রিপ্ট করার মেথড
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);
}
// প্রাইভেট কী দিয়ে ডিক্রিপ্ট করার মেথড
public static String decrypt(String encryptedData, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
byte[] decryptedData = cipher.doFinal(decodedBytes);
return new String(decryptedData);
}
}
ব্যাখ্যা:
- KeyPairGenerator: RSA কী পেয়ার তৈরি করার জন্য ব্যবহৃত হয়। একটি পাবলিক কী এবং একটি প্রাইভেট কী তৈরি করা হয়।
- Cipher.getInstance("RSA"): RSA অ্যালগরিদম ব্যবহার করে এনক্রিপশন এবং ডিক্রিপশন করা হয়।
- PublicKey এবং PrivateKey: পাবলিক কী দিয়ে ডেটা এনক্রিপ্ট করা হয় এবং প্রাইভেট কী দিয়ে ডেটা ডিক্রিপ্ট করা হয়।
প্রধান পার্থক্য:
- Symmetric Key Encryption (AES):
- একটি একক কী ব্যবহার করা হয়।
- দ্রুত এবং কার্যকর, তবে কী শেয়ারিং সমস্যা থাকতে পারে।
- Asymmetric Key Encryption (RSA):
- দুটি কী ব্যবহার করা হয়: একটি পাবলিক কী (এনক্রিপ্ট করার জন্য) এবং একটি প্রাইভেট কী (ডিক্রিপ্ট করার জন্য)।
- নিরাপদ, তবে এটি স্লো এবং বড় ডেটা এনক্রিপশন ও ডিক্রিপশনের জন্য উপযুক্ত নয়। সাধারণত এটি ডিজিটাল সিগনেচার বা ছোট ডেটার জন্য ব্যবহৃত হয়।
এই উদাহরণগুলি AES এবং RSA অ্যালগরিদম ব্যবহার করে এনক্রিপশন এবং ডিক্রিপশন প্রক্রিয়া প্রদর্শন করে। Symmetric এবং Asymmetric Encryption উভয় পদ্ধতিই নিরাপদ ডেটা ট্রান্সমিশন নিশ্চিত করতে ব্যবহৃত হয়।
Read more