Cipher হল একটি ক্রিপ্টোগ্রাফিক অ্যালগরিদম যা ডেটা এনক্রিপশন এবং ডিক্রিপশনের জন্য ব্যবহৃত হয়। এটি একটি গোপন পদ্ধতি ব্যবহার করে ডেটাকে রূপান্তরিত (encrypt) করে, যাতে কোনো অবাঞ্ছিত পক্ষ ডেটা পড়তে না পারে। শুধু মাত্র অনুমোদিত ব্যক্তি (যিনি এনক্রিপশন বা ডিক্রিপশন কী জানেন) সেই ডেটা অ্যাক্সেস করতে সক্ষম হন।
Cipher এর প্রধান ফিচার
- Encryption (এনক্রিপশন): Cipher ব্যবহার করে আপনি একটি প্লেইনটেক্সট (স্পষ্ট ডেটা) কে সিকিউরড বা এনক্রিপ্টেড টেক্সটে রূপান্তরিত করেন, যাতে সেই টেক্সটটি অপরিচিত বা অবাঞ্ছিত পক্ষ দ্বারা সহজে পড়া না যায়।
- Decryption (ডিক্রিপশন): Cipher ব্যবহৃত হয়ে এনক্রিপ্ট করা ডেটাকে আবার প্লেইনটেক্সটে (আসল ডেটা) রূপান্তরিত করা যায়, কিন্তু শুধুমাত্র প্রাপকের কাছে থাকা সঠিক কী দিয়ে এটি করা সম্ভব।
Types of Ciphers
Ciphers সাধারণত দুটি প্রকারে ভাগ করা হয়:
- Symmetric Key Ciphers:
- একই কী দিয়ে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়।
- AES, DES, 3DES এই ধরনের সাইফারের উদাহরণ।
- দ্রুত এবং কমপ্লেক্সিটির দিক থেকে সহজ হলেও কী পরিচালনা একটু সমস্যা হতে পারে।
- Asymmetric Key Ciphers:
- দুটি আলাদা কী ব্যবহৃত হয়—একটি Public Key (যা সবাই জানে) এবং একটি Private Key (যা শুধুমাত্র প্রাপকের কাছে থাকে)।
- RSA, Elliptic Curve Cryptography (ECC) এই ধরনের সাইফারের উদাহরণ।
- নিরাপত্তা অনেক বেশি হলেও পারফরম্যান্স কিছুটা ধীর।
Cipher কীভাবে কাজ করে?
Cipher সাধারণত block cipher এবং stream cipher হিসেবে বিভক্ত করা হয়, যা তাদের ডেটা এনক্রিপ্ট করার পদ্ধতির উপর নির্ভর করে।
- Block Cipher:
- একটি নির্দিষ্ট আকারের ডেটা ব্লক (যেমন 128 বিট) নিয়ে কাজ করে। প্রতিটি ব্লক একটি নির্দিষ্ট এনক্রিপশন কী দিয়ে এনক্রিপ্ট করা হয়।
- উদাহরণ: AES (Advanced Encryption Standard), DES (Data Encryption Standard)।
- Stream Cipher:
- এটি ডেটাকে বিট বা বাইট আকারে এনক্রিপ্ট করে। এটি ধারাবাহিকভাবে ইনপুট ডেটা গ্রহণ করে এবং তাকে এনক্রিপ্ট করে।
- উদাহরণ: RC4।
Java Cryptography: Cipher Implementation
Java Cryptography API ব্যবহার করে সাইফার এনক্রিপশন এবং ডিক্রিপশন সহজেই করা যায়। Java-তে Cipher ক্লাস ব্যবহার করে সাইফার প্রক্রিয়া বাস্তবায়ন করা হয়। নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে AES (Advanced Encryption Standard) সাইফার ব্যবহৃত হয়েছে।
AES Cipher Example in Java
এখানে একটি সহজ উদাহরণ দেওয়া হলো যেখানে AES সাইফার ব্যবহৃত হয়েছে প্লেইনটেক্সটকে এনক্রিপ্ট এবং ডিক্রিপ্ট করতে।
1. AES Encryption and Decryption in Java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class CipherExample {
public static void main(String[] args) throws Exception {
// Generate a secret AES key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // Key size
SecretKey secretKey = keyGenerator.generateKey();
// Input data to be encrypted
String inputData = "Hello, this is a secure message!";
// Create Cipher instance for AES encryption
Cipher cipher = Cipher.getInstance("AES");
// Encrypt the data using AES and the secret key
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(inputData.getBytes());
// Encode the encrypted data to Base64 for display
String encryptedText = Base64.getEncoder().encodeToString(encryptedData);
System.out.println("Encrypted Text: " + encryptedText);
// Decrypt the data using the same secret key
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
// Convert decrypted data back to string
String decryptedText = new String(decryptedData);
System.out.println("Decrypted Text: " + decryptedText);
}
}
Output Example:
Encrypted Text: D5uvU0pZt9A1v6z9JcAzyQ==
Decrypted Text: Hello, this is a secure message!
Explanation:
- KeyGenerator: এটি একটি AES সিক্রেট কী তৈরি করে।
- Cipher.getInstance("AES"): এটি AES সাইফারকে ইনিশিয়ালাইজ করে।
- cipher.init(Cipher.ENCRYPT_MODE, secretKey): এটি সাইফারকে এনক্রিপশন মোডে সেট করে এবং সিক্রেট কী ব্যবহার করে।
- cipher.doFinal(inputData.getBytes()): ইনপুট ডেটা এনক্রিপ্ট করা হয়।
- Base64.getEncoder().encodeToString(encryptedData): এনক্রিপ্ট করা ডেটা Base64 ফরম্যাটে রূপান্তরিত হয়, যাতে এটি পাঠযোগ্য হয়।
- cipher.init(Cipher.DECRYPT_MODE, secretKey): ডিক্রিপশন মোডে সাইফার ইনিশিয়ালাইজ করা হয়।
- cipher.doFinal(Base64.getDecoder().decode(encryptedText)): এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করা হয়।
Cipher-এর ব্যবহারের ক্ষেত্র
- Data Encryption (ডেটা এনক্রিপশন):
- সাইফার ব্যবহৃত হয় সুরক্ষিত ডেটা ট্রান্সফারের জন্য, যেমন confidential information সংরক্ষণ করা বা পাঠানো।
- Symmetric Ciphers (AES) এবং Asymmetric Ciphers (RSA) সিক্রেট ডেটা এনক্রিপ্ট করতে ব্যবহৃত হয়।
- Secure Communication (নিরাপদ যোগাযোগ):
- SSL/TLS প্রোটোকলটি cipher ব্যবহার করে সুরক্ষিত ওয়েব যোগাযোগ নিশ্চিত করে।
- সাইফার ওয়েব ব্রাউজার এবং সার্ভারের মধ্যে নিরাপদ ডেটা ট্রান্সফার নিশ্চিত করতে ব্যবহৃত হয়।
- File Encryption (ফাইল এনক্রিপশন):
- সাইফার ফাইল এবং ডকুমেন্ট এনক্রিপ্ট করতে ব্যবহৃত হয়, যাতে অপ্রত্যাশিত পক্ষ সেই ফাইল বা ডকুমেন্ট অ্যাক্সেস করতে না পারে।
- Digital Signatures (ডিজিটাল সিগনেচার):
- ডকুমেন্টে সাইন করার জন্য private key দিয়ে সাইফার ব্যবহার করা হয়, যা পরে public key দিয়ে যাচাই করা হয়।
- Password Encryption (পাসওয়ার্ড এনক্রিপশন):
- সাইফার ব্যবহৃত হয় পাসওয়ার্ড এনক্রিপ্ট করতে, যাতে পাসওয়ার্ড সিস্টেমে সুরক্ষিত থাকে এবং সুরক্ষিতভাবে সংরক্ষিত থাকে।
- Blockchain (ব্লকচেইন):
- Blockchain সিস্টেমে cipher ব্যবহৃত হয় ব্লকগুলোর মধ্যে সুরক্ষিত ট্রান্সফার এবং ম্যানিপুলেশন রোধ করতে।
- VPN (Virtual Private Network):
- VPNs সাইফার ব্যবহার করে নেটওয়ার্কের মধ্যে নিরাপদ যোগাযোগ নিশ্চিত করতে। এটি ডেটাকে এনক্রিপ্ট করে এবং নিরাপদভাবে পাঠায়।
Cipher হল ক্রিপ্টোগ্রাফির একটি গুরুত্বপূর্ণ অংশ যা ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করতে ব্যবহৃত হয়। Java Cryptography API ব্যবহার করে AES, RSA, DES ইত্যাদি সাইফার অ্যালগরিদমের মাধ্যমে আপনি নিরাপদ ডেটা ট্রান্সফার এবং সুরক্ষা নিশ্চিত করতে পারেন। সাইফার ব্যবহৃত হয় data encryption, secure communication, digital signatures, file encryption, password hashing, এবং blockchain সহ বিভিন্ন ক্ষেত্রে নিরাপত্তা নিশ্চিত করতে।
Read more