Java বিভিন্ন লাইব্রেরি এবং এপিআই প্রদান করে যা অ্যাপ্লিকেশনে নিরাপত্তা ফিচারগুলি প্রয়োগ করতে সাহায্য করে। এখানে কিছু সাধারণ Java সিকিউরিটি উদাহরণ দেওয়া হল, যা এনক্রিপশন, ডিক্রিপশন, হ্যাশিং এবং কী ম্যানেজমেন্ট সম্পর্কিত।
এই উদাহরণে, আমরা SHA-256 হ্যাশিং অ্যালগরিদম ব্যবহার করে একটি পাসওয়ার্ড হ্যাশ করব।
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class HashingExample {
public static void main(String[] args) {
try {
// হ্যাশ করার জন্য ইনপুট স্ট্রিং
String password = "mySecretPassword";
// SHA-256 এর জন্য MessageDigest ইনস্ট্যান্স তৈরি করা
MessageDigest digest = MessageDigest.getInstance("SHA-256");
// পাসওয়ার্ডে হ্যাশ ফাংশন প্রয়োগ করা
byte[] hash = digest.digest(password.getBytes());
// বাইট অ্যারে থেকে হেক্সাডেসিমাল স্ট্রিং এ রূপান্তর করা
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
// হ্যাশ করা পাসওয়ার্ড আউটপুট করা
System.out.println("Hashed Password (SHA-256): " + hexString.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
MessageDigest.getInstance("SHA-256")
SHA-256 ডাইজেস্ট ইনস্ট্যান্স তৈরি করে।digest.digest()
আসল হ্যাশিং কার্যক্রমটি সম্পন্ন করে।Hashed Password (SHA-256): f9f4b45efed1e2f2c8e12ff503a0dcb40f5bdbf5eeb3d61d2702c481417f7ac7
এই উদাহরণে, আমরা AES এনক্রিপশন এবং ডিক্রিপশন একটি সিক্রেট কী ব্যবহার করে প্রদর্শন করব।
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESExample {
public static void main(String[] args) throws Exception {
// একটি র্যান্ডম AES কী জেনারেট করা
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // AES-128
SecretKey secretKey = keyGenerator.generateKey();
// এনক্রিপ্ট করার জন্য প্লেইনটেক্সট
String plaintext = "This is a secret message";
// সাইফার তৈরি করা
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted Text: " + encryptedText);
// ডিক্রিপ্ট করার জন্য সাইফারটি আবার ইনিশিয়ালাইজ করা
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted Text: " + decryptedText);
}
}
Cipher.getInstance("AES")
AES এনক্রিপশন/ডিক্রিপশন ফাংশনালিটি প্রদান করে।Encrypted Text: XHOMz5h7erjj63c5uDEz8Q==
Decrypted Text: This is a secret message
এই উদাহরণে, আমরা RSA এনক্রিপশন এবং ডিক্রিপশন পাবলিক এবং প্রাইভেট কী ব্যবহার করে প্রদর্শন করব।
import java.security.*;
import javax.crypto.Cipher;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
// RSA কীপেয়ার (পাবলিক এবং প্রাইভেট কী) তৈরি করা
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// এনক্রিপ্ট করার জন্য মেসেজ
String message = "This is a confidential message";
// পাবলিক কী ব্যবহার করে মেসেজ এনক্রিপ্ট করা
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedMessage = cipher.doFinal(message.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedMessage);
System.out.println("Encrypted Text: " + encryptedText);
// প্রাইভেট কী ব্যবহার করে মেসেজ ডিক্রিপ্ট করা
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedMessage = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedMessage);
System.out.println("Decrypted Text: " + decryptedText);
}
}
Encrypted Text: ztT3A4jQmK0hOk8mr9I1f3EklrGhzttEOBt4Jrgw6vkt8pt5Skrh/2p8kJSCKptgqMjfZLz7GF1Fw/xETK6Kh7usF0vh4lzFddYQFV2hnBcPsbZcDfjk8G5PBtPO9s74jV5WsRKK3RBGV9b8zQUk9w==
Decrypted Text: This is a confidential message
এই উদাহরণে, আমরা একটি ডিজিটাল সিগনেচার তৈরি এবং যাচাই করব RSA ব্যবহার করে।
import java.security.*;
import java.util.Base64;
public class DigitalSignatureExample {
public static void main(String[] args) throws Exception {
// RSA কীপেয়ার (প্রাইভেট এবং পাবলিক কী) তৈরি করা
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
// সাইন করার জন্য মেসেজ
String message = "This message needs to be signed.";
// প্রাইভেট কী ব্যবহার করে ডিজিটাল সিগনেচার তৈরি করা
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(message.getBytes());
byte[] digitalSignature = signature.sign();
String signatureStr = Base64.getEncoder().encodeToString(digitalSignature);
System.out.println("Digital Signature: " + signatureStr);
// পাবলিক কী ব্যবহার করে সিগনেচার যাচাই করা
signature.initVerify(publicKey);
signature.update(message.getBytes());
boolean isValid = signature.verify(Base64.getDecoder().decode(signatureStr));
System.out.println("Is the signature valid? " + isValid);
}
}
Digital Signature: cTtP9abYqX2erLbSFFGxy9g+Q3WgX7KmvwW6uw63H2/06k5f/F0Znkn40ghw/jJMjBrs1r13m4ZxXGxOX9NSFg==
Is the signature valid? true
KeyStore ব্যবহার করে ক্রিপ্টো গ্রাফিক কী, সার্টিফিকেট এবং সিক্রেট কী সংরক্ষণ করা হয়।
import java.io.*;
import java.security.*;
import java.security.cert.CertificateException;
public class KeyStoreExample {
public static void main(String[] args) throws Exception {
// KeyStore ইনস্ট্যান্স তৈরি
KeyStore keyStore = KeyStore.getInstance("JKS");
// KeyStore লোড বা তৈরি করা
FileInputStream keyStoreFile = new FileInputStream("keystore.jks");
keyStore.load(keyStoreFile, "keystorePassword".toCharArray());
// KeyStore থেকে প্রাইভেট কী উদ্ধার
PrivateKey privateKey = (PrivateKey) keyStore.getKey("myKey", "keyPassword".toCharArray());
System.out.println("Private Key Retrieved: " + privateKey);
}
}
এই উদাহরণগুলো Java-তে বিভিন্ন সিকিউরিটি কার্যক্রম যেমন হ্যাশিং, এনক্রিপশন, ডিজিটাল সিগনেচার, এবং কী ম্যানেজমেন্ট নিয়ে কাজ করার জন্য ব্যবহার করা যেতে পারে। Java এর Security API শক্তিশালী এবং নমনীয় সিকিউরিটি ফিচার প্রদান করে যা সিমেট্রিক এবং অ্যাসিমেট্রিক এনক্রিপশন উভয় ধরনের কাজ করতে সহায়তা করে।
Java-তে Encryption এবং Decryption বিভিন্ন পদ্ধতি ব্যবহার করে করা যেতে পারে। দুটি প্রধান পদ্ধতি হলো:
এখানে আমি দুটি উদাহরণ দেখাবো—একটি Symmetric Key Encryption এবং একটি Asymmetric Key Encryption।
এখানে AES (Advanced Encryption Standard) ব্যবহার করা হয়েছে, যা একটি জনপ্রিয় symmetric encryption অ্যালগরিদম। এখানে একই কী ব্যবহার করে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা হয়।
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);
}
}
এখানে RSA অ্যালগরিদম ব্যবহার করা হয়েছে, যা একটি asymmetric encryption পদ্ধতি, যেখানে দুটি কী ব্যবহৃত হয়—একটি পাবলিক কী (এনক্রিপ্ট করার জন্য) এবং একটি প্রাইভেট কী (ডিক্রিপ্ট করার জন্য)।
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);
}
}
এই উদাহরণগুলি AES এবং RSA অ্যালগরিদম ব্যবহার করে এনক্রিপশন এবং ডিক্রিপশন প্রক্রিয়া প্রদর্শন করে। Symmetric এবং Asymmetric Encryption উভয় পদ্ধতিই নিরাপদ ডেটা ট্রান্সমিশন নিশ্চিত করতে ব্যবহৃত হয়।
A digital signature is a cryptographic mechanism used to verify the authenticity and integrity of a message or document. It provides a way to ensure that a message has not been altered and that it comes from the expected sender.
Java provides the Java Cryptography Architecture (JCA) to create digital signatures using algorithms such as RSA, DSA, and ECDSA.
Below is an example of how to create and verify a digital signature using the RSA algorithm in Java.
This code demonstrates how to create a digital signature using the private key.
import java.security.*;
import java.util.Base64;
public class DigitalSignatureExample {
public static void main(String[] args) {
try {
// Generate RSA Key Pair (Private and Public Keys)
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048-bit key size
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
// Message to be signed
String message = "This is a confidential message";
// Create a Signature object
Signature signature = Signature.getInstance("SHA256withRSA");
// Initialize the Signature object with the private key
signature.initSign(privateKey);
// Update the Signature object with the message data
signature.update(message.getBytes());
// Generate the digital signature
byte[] digitalSignature = signature.sign();
// Print the digital signature (Base64 encoded for readability)
String encodedSignature = Base64.getEncoder().encodeToString(digitalSignature);
System.out.println("Digital Signature (Base64 encoded): " + encodedSignature);
// Now verify the signature using the public key
boolean isVerified = verifySignature(message, encodedSignature, publicKey);
System.out.println("Signature Verified: " + isVerified);
} catch (Exception e) {
e.printStackTrace();
}
}
// Method to verify the digital signature using the public key
public static boolean verifySignature(String message, String encodedSignature, PublicKey publicKey) {
try {
// Decode the Base64 encoded signature
byte[] signatureBytes = Base64.getDecoder().decode(encodedSignature);
// Create a Signature object for verification
Signature signature = Signature.getInstance("SHA256withRSA");
// Initialize the Signature object with the public key
signature.initVerify(publicKey);
// Update the Signature object with the message data
signature.update(message.getBytes());
// Verify the signature
return signature.verify(signatureBytes);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
KeyPairGenerator
ক্লাস ব্যবহার করে RSA কীগুলি তৈরি করা হয় (2048-বিট)। এটি একটি PrivateKey এবং একটি PublicKey তৈরি করে।Signature.getInstance("SHA256withRSA")
ব্যবহার করে আমরা SHA-256 হ্যাশিং এলগরিদমের মাধ্যমে RSA ডিজিটাল সিগনেচার তৈরি করি।signature.sign()
পদ্ধতি ব্যবহার করা হয়।signature.verify(signatureBytes)
পদ্ধতি দিয়ে যাচাই করা হয় যে, সিগনেচার সঠিক এবং মূল বার্তা (message) সঙ্গে সঙ্গতিপূর্ণ।Digital Signature (Base64 encoded): <Base64_Encoded_Signature>
Signature Verified: true
এই উদাহরণটি দেখিয়েছে কিভাবে আপনি জাভাতে ডিজিটাল সিগনেচার তৈরি এবং যাচাই করতে পারেন। এটি একটি নিরাপদ পদ্ধতি যা বার্তার অখণ্ডতা এবং প্রমাণীকরণের জন্য ব্যবহৃত হয়।
Java Secure Socket Layer (SSL) ব্যবহারের মাধ্যমে নিরাপদ যোগাযোগ প্রতিষ্ঠা করার জন্য SSL প্রোটোকল ব্যবহার করা হয়। Java-তে SSL বা TLS (Transport Layer Security) ব্যবহার করা অনেক সাধারণ কাজের মধ্যে একটি, যেমন নিরাপদ HTTP (HTTPS) সংযোগ বা অন্যান্য নিরাপদ সঞ্চালন ব্যবস্থার জন্য।
Java-তে SSL প্রোটোকল ব্যবহারের জন্য, আপনি সাধারণত SSLSocket
বা SSLServerSocket
ব্যবহার করতে পারেন, যা javax.net.ssl
প্যাকেজে উপলব্ধ।
নিচে একটি উদাহরণ দেওয়া হলো যেখানে একটি SSL Client এবং SSL Server তৈরি করা হবে:
এই উদাহরণে, আমরা একটি SSL Server তৈরি করব, যা ক্লায়েন্ট থেকে সংযোগ গ্রহণ করবে এবং নিরাপদভাবে ডেটা প্রেরণ করবে।
import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import java.io.*;
import java.security.KeyStore;
public class SSLServer {
public static void main(String[] args) {
try {
// KeyStore পাসওয়ার্ড এবং ফাইল পাথ সেট করা
char[] password = "password".toCharArray();
KeyStore keyStore = KeyStore.getInstance("JKS");
FileInputStream keyStoreFile = new FileInputStream("server.jks"); // Server KeyStore ফাইল
keyStore.load(keyStoreFile, password);
// KeyManagerFactory তৈরি করা এবং KeyStore সেট করা
javax.net.ssl.KeyManagerFactory keyManagerFactory = javax.net.ssl.KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(keyStore, password);
// SSLServerSocketFactory তৈরি করা
SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
// SSLServerSocket তৈরি করা
SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(9999);
System.out.println("SSL Server started and waiting for client connection...");
while (true) {
// ক্লায়েন্ট সংযোগ গ্রহণ করা
javax.net.ssl.SSLSocket sslSocket = (javax.net.ssl.SSLSocket) sslServerSocket.accept();
System.out.println("Client connected: " + sslSocket.getInetAddress());
// ক্লায়েন্টের সাথে ইন্টারঅ্যাক্ট করা
BufferedReader reader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
PrintWriter writer = new PrintWriter(sslSocket.getOutputStream(), true);
String clientMessage;
while ((clientMessage = reader.readLine()) != null) {
System.out.println("Received from client: " + clientMessage);
writer.println("Server response: " + clientMessage.toUpperCase());
}
sslSocket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখন আমরা একটি SSL Client তৈরি করব, যা সার্ভারের সাথে নিরাপদভাবে সংযোগ করবে এবং ডেটা পাঠাবে।
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
import java.security.KeyStore;
public class SSLClient {
public static void main(String[] args) {
try {
// KeyStore পাসওয়ার্ড এবং ফাইল পাথ সেট করা
char[] password = "password".toCharArray();
KeyStore keyStore = KeyStore.getInstance("JKS");
FileInputStream keyStoreFile = new FileInputStream("client.jks"); // Client KeyStore ফাইল
keyStore.load(keyStoreFile, password);
// TrustManagerFactory তৈরি করা এবং KeyStore সেট করা
javax.net.ssl.TrustManagerFactory trustManagerFactory = javax.net.ssl.TrustManagerFactory.getInstance("SunX509");
trustManagerFactory.init(keyStore);
// SSLSocketFactory তৈরি করা
SSLSocketFactory sslSocketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
// সার্ভারের সাথে সংযোগ স্থাপন
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("localhost", 9999);
sslSocket.setEnabledProtocols(new String[] {"TLSv1.2"});
// সার্ভারের সাথে ইন্টারঅ্যাক্ট করা
BufferedReader reader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
PrintWriter writer = new PrintWriter(sslSocket.getOutputStream(), true);
// ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানো
writer.println("Hello from client!");
// সার্ভার থেকে রেসপন্স গ্রহণ করা
String serverResponse;
while ((serverResponse = reader.readLine()) != null) {
System.out.println("Received from server: " + serverResponse);
}
sslSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
এখানে KeyStore এবং TrustStore ব্যবহৃত হয়েছে, যা Java-এর সিকিউরিটি ম্যানেজমেন্টের অংশ। আপনি keytool
কমান্ড ব্যবহার করে নিজের Keystore তৈরি করতে পারেন।
keytool -genkey -keyalg RSA -alias serverkey -keystore server.jks -validity 3650
keytool -import -file server.crt -keystore client.jks -alias server
এখানে server.jks
হল সার্ভারের জন্য তৈরি করা KeyStore ফাইল এবং client.jks
হল ক্লায়েন্টের জন্য তৈরি করা TrustStore ফাইল।
SSL Server (Server.java) চালানোর পর:
SSL Server started and waiting for client connection...
Client connected: /127.0.0.1
Received from client: Hello from client!
SSL Client (Client.java) চালানোর পর:
Received from server: SERVER RESPONSE: HELLO FROM CLIENT!
SSLSocket
, SSLServerSocket
, KeyStore
, এবং TrustStore
ব্যবহার করা হয়।এই উদাহরণগুলোর মাধ্যমে আপনি Java-তে SSL বা TLS প্রোটোকল ব্যবহার করে নিরাপদ সংযোগ তৈরি করতে পারেন।
Java Security API ব্যবহার করে Password Hashing একটি গুরুত্বপূর্ণ নিরাপত্তা প্রযুক্তি, যা পাসওয়ার্ডগুলোকে নিরাপদভাবে স্টোর করার জন্য ব্যবহৃত হয়। এই প্রক্রিয়ায়, পাসওয়ার্ডগুলোকে সরাসরি সংরক্ষণ না করে, তাদের হ্যাশ করা হয়। হ্যাশিং একটি একমুখী প্রক্রিয়া, যার মাধ্যমে আপনি পাসওয়ার্ডের আসল মানটি পুনরুদ্ধার করতে পারবেন না, তবে সঠিক পাসওয়ার্ড ইনপুট দিলে একই হ্যাশ মান পাওয়া যাবে।
নিচে, Java Security API ব্যবহার করে পাসওয়ার্ড হ্যাশিং করার একটি উদাহরণ দেখানো হলো।
SHA-256 (Secure Hash Algorithm) একটি জনপ্রিয় হ্যাশিং অ্যালগরিদম যা পাসওয়ার্ড হ্যাশিংয়ের জন্য ব্যবহার করা হয়।
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordHashingExample {
// পাসওয়ার্ড হ্যাশ করার মেথড
public static String hashPassword(String password) throws NoSuchAlgorithmException {
// SHA-256 অ্যালগরিদম ব্যবহার করে হ্যাশ তৈরি করা
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
// পাসওয়ার্ডের বাইটস পাবলিক আর্গুমেন্ট হিসেবে নিয়ে হ্যাশ তৈরি করা
byte[] hashedBytes = messageDigest.digest(password.getBytes());
// হ্যাশ বাইটসকে হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করা
StringBuilder stringBuilder = new StringBuilder();
for (byte b : hashedBytes) {
stringBuilder.append(String.format("%02x", b));
}
// হ্যাশড পাসওয়ার্ড রিটার্ন করা
return stringBuilder.toString();
}
// পাসওয়ার্ড এবং তার হ্যাশ মেলানো
public static boolean verifyPassword(String originalPassword, String storedHash) throws NoSuchAlgorithmException {
// পাসওয়ার্ড হ্যাশ করা
String hashedPassword = hashPassword(originalPassword);
// হ্যাশ মেলানো
return hashedPassword.equals(storedHash);
}
public static void main(String[] args) {
try {
// পাসওয়ার্ড ইনপুট
String password = "mySecurePassword";
// পাসওয়ার্ড হ্যাশ করা
String hashedPassword = hashPassword(password);
System.out.println("Hashed Password: " + hashedPassword);
// হ্যাশ ভেরিফিকেশন
String inputPassword = "mySecurePassword";
if (verifyPassword(inputPassword, hashedPassword)) {
System.out.println("Password is correct.");
} else {
System.out.println("Password is incorrect.");
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
MessageDigest
ক্লাস:getInstance("SHA-256")
দ্বারা SHA-256 অ্যালগরিদম ব্যবহার করা হচ্ছে।hashPassword()
মেথড:messageDigest.digest()
মেথডটি পাসওয়ার্ডের বাইটস নিয়ে তাদের হ্যাশ বের করে।verifyPassword()
মেথড:main()
মেথড:পাসওয়ার্ড হ্যাশিংয়ে Salt ব্যবহার করলে, একে আরো নিরাপদ করা যায়। Salt হল একটি এলোমেলো স্ট্রিং যা পাসওয়ার্ডের সাথে যুক্ত করা হয়, যাতে একাধিক ব্যবহারকারীর একই পাসওয়ার্ড থাকা সত্ত্বেও তাদের হ্যাশ ভিন্ন হয়।
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class SaltedPasswordHashingExample {
// Salt তৈরি করার মেথড
public static String getSalt() {
SecureRandom random = new SecureRandom();
byte[] salt = new byte[16];
random.nextBytes(salt);
return bytesToHex(salt);
}
// বাইটগুলোকে হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করার মেথড
public static String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
}
// পাসওয়ার্ড হ্যাশ করার মেথড (Salt সহ)
public static String hashPasswordWithSalt(String password, String salt) throws NoSuchAlgorithmException {
// SHA-256 অ্যালগরিদম ব্যবহার করা
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
// পাসওয়ার্ড এবং salt একত্রে কনক্যাট করা
messageDigest.update((password + salt).getBytes());
// হ্যাশ তৈরি করা
byte[] hashedBytes = messageDigest.digest();
// হ্যাশ বাইটসকে হেক্সাডেসিমাল স্ট্রিংয়ে রূপান্তর করা
return bytesToHex(hashedBytes);
}
public static void main(String[] args) {
try {
// পাসওয়ার্ড ইনপুট
String password = "mySecurePassword";
// Salt তৈরি করা
String salt = getSalt();
System.out.println("Generated Salt: " + salt);
// Salt সহ পাসওয়ার্ড হ্যাশ করা
String hashedPasswordWithSalt = hashPasswordWithSalt(password, salt);
System.out.println("Hashed Password with Salt: " + hashedPasswordWithSalt);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
SecureRandom
ব্যবহার করা হয়েছে, যা নিরাপদভাবে এলোমেলো ডেটা তৈরি করে।MessageDigest
ক্লাস ব্যবহার করে SHA-256 বা অন্যান্য হ্যাশিং অ্যালগরিদম দিয়ে পাসওয়ার্ড হ্যাশ করা যায়।Java তে KeyPair Generation এর উদাহরণ দেখানোর জন্য আমরা সাধারণত Java Cryptography Architecture (JCA) এর সাহায্য ব্যবহার করি। এখানে RSA (রিভেস্ট-শ্যামির-আলগোরিদম) কিপেয়ার (public/private key pair) তৈরি করার একটি উদাহরণ দেওয়া হল।
নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে একটি RSA কিপেয়ার তৈরি করা হচ্ছে:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class KeyPairGenerationExample {
public static void main(String[] args) {
try {
// KeyPairGenerator তৈরি করুন
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// RSA কিপেয়ার তৈরির জন্য নির্দিষ্ট শক্তি সেট করুন
keyPairGenerator.initialize(2048, new SecureRandom());
// কিপেয়ার তৈরি করুন
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// পাবলিক এবং প্রাইভেট কিপাব্দ হস্তগত করুন
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
// পাবলিক এবং প্রাইভেট কির চিত্র প্রদর্শন
System.out.println("Public Key: " + publicKey);
System.out.println("Private Key: " + privateKey);
} catch (NoSuchAlgorithmException e) {
System.out.println("Key generation algorithm not found: " + e.getMessage());
}
}
}
KeyPair
তৈরি করতে ব্যবহৃত ক্লাস। আমরা এখানে "RSA" আলগোরিদম ব্যবহার করছি, তবে আপনি অন্যান্য আলগোরিদম যেমন DSA বা EC (Elliptic Curve) ব্যবহার করতে পারেন।এটি একটি মৌলিক উদাহরণ, এবং আপনি এই কিপেয়ার ব্যবহার করে এনক্রিপশন এবং সিগনেচার তৈরির মতো বিভিন্ন নিরাপত্তা ফিচার প্রয়োগ করতে পারেন।
Read more