Passay লাইব্রেরি মূলত পাসওয়ার্ড ভ্যালিডেশন ও সিকিউরিটি সম্পর্কিত কাজগুলো করে, তবে এটি পাসওয়ার্ড encoding বা hashing করার জন্য সরাসরি কোনও সমর্থন প্রদান করে না। তবে, পাসওয়ার্ড এনকোডিং এবং হ্যাশিং সম্পর্কিত কাজগুলো Java-তে সাধারণত BCrypt, PBKDF2, SHA-256, বা Argon2 এর মত এলগোরিদম ব্যবহার করে করা হয়।
নিচে আমি Java-তে পাসওয়ার্ড এনকোডিং এবং হ্যাশিং করার জন্য একটি উদাহরণ দেব।
Password Encoding এবং Hashing উদাহরণ:
Java-তে পাসওয়ার্ড হ্যাশিং এবং এনকোডিং এর জন্য BCrypt এবং SHA-256 এর মত জনপ্রিয় মেথড ব্যবহার করা হয়। এখানে BCrypt এর একটি উদাহরণ দেখানো হয়েছে:
1. BCrypt ব্যবহার করে পাসওয়ার্ড হ্যাশিং:
BCrypt একটি সিকিউর হ্যাশিং এলগোরিদম যা সল্ট (salt) ব্যবহার করে, এবং এটিকে সঠিকভাবে হ্যাশিং এর জন্য খুবই নিরাপদ মনে করা হয়।
BCrypt ব্যবহার করে পাসওয়ার্ড হ্যাশিং উদাহরণ:
import org.mindrot.jbcrypt.BCrypt;
public class PasswordHashingExample {
public static void main(String[] args) {
String plainPassword = "MySecurePassword123";
// পাসওয়ার্ড হ্যাশ করা
String hashedPassword = BCrypt.hashpw(plainPassword, BCrypt.gensalt());
System.out.println("হ্যাশ করা পাসওয়ার্ড: " + hashedPassword);
// পাসওয়ার্ড যাচাই করা
if (BCrypt.checkpw(plainPassword, hashedPassword)) {
System.out.println("পাসওয়ার্ড মেলে!");
} else {
System.out.println("পাসওয়ার্ড মেলে না!");
}
}
}
Maven Dependency for BCrypt:
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
2. SHA-256 ব্যবহার করে পাসওয়ার্ড হ্যাশিং:
SHA-256 একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন যা পাসওয়ার্ড হ্যাশিংয়ের জন্য ব্যবহার করা যেতে পারে। SHA-256 শক্তিশালী কিন্তু সহজ পদ্ধতি, তবে এটি সল্ট ব্যবহার না করলে নিরাপত্তা দুর্বল হতে পারে।
SHA-256 ব্যবহার করে পাসওয়ার্ড হ্যাশিং উদাহরণ:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256PasswordHashing {
public static void main(String[] args) throws NoSuchAlgorithmException {
String password = "MySecurePassword123";
// SHA-256 হ্যাশ তৈরি করা
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("SHA-256 হ্যাশ: " + hexString.toString());
}
}
SHA-256 হ্যাশিং এর মূল বিষয়:
- SHA-256 ফাংশন একে একে 256 বিট আউটপুট উৎপন্ন করে।
- এটি সল্ট ছাড়া হ্যাশিং করা হয়, যা নিরাপত্তা ঝুঁকি তৈরি করতে পারে যদি পাসওয়ার্ডগুলো সহজ হয় বা কম্পিউটিং শক্তি বেশি থাকে।
পাসওয়ার্ড এনকোডিং এবং হ্যাশিংয়ে সল্ট ব্যবহার করা:
সল্ট (salt) হল একটি এলোমেলো ডাটা যা পাসওয়ার্ডের সাথে যুক্ত করা হয় এবং এটি পাসওয়ার্ডের হ্যাশের অপ্রত্যাশিত ফলাফল তৈরি করতে সাহায্য করে। উদাহরণস্বরূপ, যদি দুইজন ব্যবহারকারীর একই পাসওয়ার্ড থাকে, তবে সল্ট ব্যবহার না করলে তাদের হ্যাশ একই হবে, কিন্তু সল্ট ব্যবহার করলে তাদের হ্যাশ আলাদা হবে।
3. PBKDF2 ব্যবহার করে পাসওয়ার্ড হ্যাশিং:
PBKDF2 (Password-Based Key Derivation Function 2) একটি পাসওয়ার্ড হ্যাশিং এলগোরিদম যা সল্ট এবং লুপ কাউন্ট ব্যবহার করে নিরাপত্তা বাড়ায়।
PBKDF2 উদাহরণ:
import java.security.MessageDigest;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
public class PBKDF2PasswordHashing {
public static void main(String[] args) throws Exception {
String password = "MySecurePassword123";
String salt = "randomSalt";
// PBKDF2 হ্যাশ তৈরি করা
PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), 65536, 256);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hash = skf.generateSecret(spec).getEncoded();
// হ্যাশ আউটপুট
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
System.out.println("PBKDF2 হ্যাশ: " + hexString.toString());
}
}
Maven Dependency for PBKDF2:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-crypto</artifactId>
<version>1.1.0</version>
</dependency>
উল্লেখযোগ্য বিষয়সমূহ:
- সল্ট: পাসওয়ার্ড হ্যাশিংয়ের জন্য সল্টের ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। এটি একটি এলোমেলো ডাটা যা পাসওয়ার্ডের সাথে যুক্ত করে এবং নিরাপত্তা বাড়ায়।
- সিকিউরিটি এলগোরিদম: Passay সিকিউরিটি নীতির জন্য সঠিক পাসওয়ার্ড যাচাই করতে সাহায্য করতে পারে, তবে পাসওয়ার্ড হ্যাশিং এবং এনকোডিংয়ের জন্য পৃথক লাইব্রেরি (যেমন BCrypt, PBKDF2) ব্যবহার করতে হবে।
এভাবে, Java-তে পাসওয়ার্ড হ্যাশিং এবং এনকোডিং ব্যবহারের জন্য বিভিন্ন সিকিউর এলগোরিদম ব্যবহার করে সুরক্ষা নিশ্চিত করা যায়।
প্যাসে (Passay) লাইব্রেরি মূলত password validation এর জন্য ব্যবহৃত হয়, তবে পাসওয়ার্ড encoding এবং hashing একটি আলাদা এবং অত্যন্ত গুরুত্বপূর্ণ বিষয়। Password encoding হল এমন একটি প্রক্রিয়া যেখানে পাসওয়ার্ডের আসল মান (plaintext) সুরক্ষিত অবস্থায় সংরক্ষিত হয়, যাতে কেউ সহজে তা পড়তে বা ব্যবহার করতে না পারে।
Password Encoding এর ধারণা:
পাসওয়ার্ড encoding হল এমন একটি প্রক্রিয়া যেখানে পাসওয়ার্ডের ডেটাকে একটি বিশেষ ফরম্যাটে রূপান্তরিত করা হয়। এই রূপান্তরের উদ্দেশ্য হল পাসওয়ার্ডের আসল মানটি সুরক্ষিত রাখা, যাতে নিরাপত্তা ক্ষুণ্ণ না হয়।
এটি সাধারণত hashing এবং salting এর মাধ্যমে সম্পন্ন হয়।
- Hashing: একটি একমুখী ক্রিপ্টোগ্রাফিক ফাংশন যা পাসওয়ার্ডের একটি নির্দিষ্ট আউটপুট তৈরি করে, এবং এটি একবার প্রক্রিয়া হয়ে গেলে পাসওয়ার্ডের মূল মানটি পুনরুদ্ধার করা সম্ভব নয়।
- Salting: একটি র্যান্ডম ডেটা (salt) পাসওয়ার্ডের সাথে যুক্ত করা, যা hashing প্রক্রিয়াকে আরও নিরাপদ করে তোলে।
Password Encoding এর প্রয়োজনীয়তা:
- Security Enhancement:
পাসওয়ার্ডকে প্লেইনটেক্সটে সংরক্ষণ করলে, যদি ডেটাবেস বা সিস্টেম হ্যাক হয়ে যায়, হ্যাকাররা সহজেই ব্যবহারকারীদের পাসওয়ার্ড চুরি করতে পারবে। তাই পাসওয়ার্ড সুরক্ষিত রাখতে hashing বা encoding অত্যন্ত গুরুত্বপূর্ণ। - Prevention of Data Breaches:
পাসওয়ার্ড যখন hash করা হয় এবং একটি সল্ট ব্যবহার করা হয়, তখন এটি ডেটা চুরি বা ব্রুট ফোর্স আক্রমণের বিরুদ্ধে সুরক্ষা দেয়। সল্টের মাধ্যমে, একই পাসওয়ার্ডের জন্য ভিন্ন hash তৈরি হয়, যা প্রতিটি ব্যবহারকারীর পাসওয়ার্ডকে আলাদা করে তোলে। - Compliance with Security Standards:
অনেক নিরাপত্তা প্রবিধান যেমন PCI-DSS, HIPAA, এবং GDPR নিরাপদ পাসওয়ার্ড স্টোরেজ প্রয়োজন। সেগুলির মধ্যে একটি গুরুত্বপূর্ণ শর্ত হল পাসওয়ার্ড hashing এবং salting নিশ্চিত করা। - Protection from Password Reuse Attacks:
পাসওয়ার্ডে সল্ট যোগ করলে, যদি একজন ব্যবহারকারী একাধিক সাইটে একই পাসওয়ার্ড ব্যবহার করে, তবুও সেই পাসওয়ার্ডগুলির hash আলাদা থাকবে। এটি পুনরায় আক্রমণ থেকে রক্ষা করে।
Passay লাইব্রেরি এবং Password Encoding:
Passay মূলত পাসওয়ার্ড ভ্যালিডেশনের জন্য ব্যবহৃত হলেও, পাসওয়ার্ড encoding বা hashing এর জন্য আপনি Java এর অন্যান্য লাইব্রেরি যেমন BCrypt, PBKDF2, বা Argon2 ব্যবহার করতে পারেন। তবে Passay তে validation সাপোর্ট করা হয়, যেমন পাসওয়ার্ডে নির্দিষ্ট শর্তাবলী পূর্ণ করতে হবে (যেমন অক্ষর, সংখ্যা, দৈর্ঘ্য ইত্যাদি), তবে encoding/hasing প্রক্রিয়া পাসওয়ার্ডের নিরাপত্তার জন্য আলাদা লাইব্রেরির মাধ্যমে করা হয়।
Password Hashing এবং Encoding এর উদাহরণ (BCrypt):
Java তে পাসওয়ার্ড hashing করার জন্য আপনি BCrypt বা অন্য কোন হ্যাশিং লাইব্রেরি ব্যবহার করতে পারেন। নীচে একটি উদাহরণ দেওয়া হলো যেখানে BCrypt ব্যবহার করে পাসওয়ার্ড হ্যাশ করা হচ্ছে।
BCrypt Hashing Example:
import org.mindrot.jbcrypt.BCrypt;
public class PasswordHashingExample {
public static void main(String[] args) {
// ব্যবহারকারীর পাসওয়ার্ড
String plainPassword = "MySecurePassword123";
// পাসওয়ার্ড হ্যাশ করা
String hashedPassword = BCrypt.hashpw(plainPassword, BCrypt.gensalt());
System.out.println("Original Password: " + plainPassword);
System.out.println("Hashed Password: " + hashedPassword);
// পাসওয়ার্ড যাচাই
if (BCrypt.checkpw(plainPassword, hashedPassword)) {
System.out.println("পাসওয়ার্ড সঠিক।");
} else {
System.out.println("পাসওয়ার্ড সঠিক নয়।");
}
}
}
Maven Dependency for BCrypt:
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
Password Hashing এবং Salting এর প্রক্রিয়া:
- Salting: সল্ট হল একটি র্যান্ডম ডেটা যা পাসওয়ার্ডের সাথে যোগ করা হয়। এটি নিশ্চিত করে যে একই পাসওয়ার্ডের জন্য দুটি ভিন্ন hash তৈরি হবে।
- Hashing: হ্যাশিং হল এমন একটি প্রক্রিয়া যার মাধ্যমে প্লেইনটেক্সট পাসওয়ার্ড একটি নির্দিষ্ট আউটপুট (হ্যাশ) আকারে পরিবর্তিত হয়, যা একমুখী, অর্থাৎ হ্যাশ করা পাসওয়ার্ড থেকে আসল পাসওয়ার্ড পুনরুদ্ধার করা সম্ভব নয়।
Hashing এবং Salting এর উপকারিতা:
- পাসওয়ার্ড পুনরুদ্ধার করা সম্ভব নয়: হ্যাশিং একমুখী প্রক্রিয়া হওয়ায়, পাসওয়ার্ড পুনরুদ্ধার করা সম্ভব নয়। তাই এটি নিরাপত্তা বাড়ায়।
- Brute Force আক্রমণের বিরুদ্ধে সুরক্ষা: সল্ট এবং হ্যাশিং ব্যবহার করলে ব্রুট ফোর্স আক্রমণ মোকাবিলা করা সহজ হয়।
- ডেটাবেস লিক হলে পাসওয়ার্ড সুরক্ষা: যদি হ্যাকার ডেটাবেস চুরি করে, তবে সল্ট এবং হ্যাশিংয়ের কারণে পাসওয়ার্ডগুলি সুরক্ষিত থাকবে এবং সেগুলি আক্রমণকারীদের জন্য ব্যবহারের অযোগ্য হয়ে যাবে।
উপসংহার:
পাসওয়ার্ড encoding বা hashing একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া যা সিস্টেমের নিরাপত্তা বৃদ্ধি করে। Passay লাইব্রেরি পাসওয়ার্ড ভ্যালিডেশনে সহায়ক হলেও, পাসওয়ার্ড hashing এবং salting করার জন্য Java তে BCrypt, PBKDF2, Argon2 এর মতো লাইব্রেরি ব্যবহার করা হয়। এটি নিশ্চিত করে যে পাসওয়ার্ড সুরক্ষিত এবং আক্রমণকারীদের জন্য দুর্বলতা সৃষ্টি না হয়।
Passay সাধারণত পাসওয়ার্ড পলিসি ভ্যালিডেশন এবং জেনারেশন ব্যবহৃত হয়, তবে পাসওয়ার্ড এনকোডিংয়ের জন্য Spring Security লাইব্রেরি ব্যবহৃত হয়। BCryptPasswordEncoder এবং Argon2PasswordEncoder হল দুটি জনপ্রিয় এনকোডার, যেগুলি নিরাপদ পাসওয়ার্ড এনকোডিং নিশ্চিত করতে ব্যবহৃত হয়। এই দুটি এনকোডার বিভিন্ন এনক্রিপশন অ্যালগরিদম (BCrypt এবং Argon2) ব্যবহার করে পাসওয়ার্ডকে হ্যাশ করে, যাতে সেটি সুরক্ষিত থাকে এবং ডেটাবেসে সংরক্ষণ করা যায়।
1. BCryptPasswordEncoder ব্যবহার:
BCrypt একটি জনপ্রিয় পাসওয়ার্ড হ্যাশিং অ্যালগরিদম, যা পাসওয়ার্ড সুরক্ষার জন্য সল্ট এবং লবিং ব্যবহার করে, এবং এটি বিভিন্ন সিকিউরিটি অ্যাটাক (যেমন ব্রুট ফোর্স) প্রতিরোধে সাহায্য করে।
উদাহরণ কোড - BCryptPasswordEncoder:
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
public class BCryptPasswordEncoderExample {
public static void main(String[] args) {
// BCryptPasswordEncoder তৈরি করা
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// পাসওয়ার্ড এনকোডিং
String rawPassword = "MySecurePassword123!";
String encodedPassword = passwordEncoder.encode(rawPassword);
// এনকোড করা পাসওয়ার্ড প্রিন্ট করা
System.out.println("Encoded Password: " + encodedPassword);
// পাসওয়ার্ড মিলানো
boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);
System.out.println("Password matches: " + matches);
}
}
কীভাবে কাজ করে:
BCryptPasswordEncoder:- এটি পাসওয়ার্ডকে BCrypt হ্যাশিং অ্যালগরিদম ব্যবহার করে এনকোড করে।
encode():- এটি পাসওয়ার্ডকে সল্টসহ এনকোড করে, এবং এনকোড করা পাসওয়ার্ড প্রদান করে।
matches():- এটি যাচাই করে যে উল্লিখিত পাসওয়ার্ডটি এনকোড করা পাসওয়ার্ডের সাথে মেলে কিনা।
2. Argon2PasswordEncoder ব্যবহার:
Argon2 আধুনিক পাসওয়ার্ড হ্যাশিং অ্যালগরিদমগুলির মধ্যে একটি, যা নিরাপত্তার জন্য আরও শক্তিশালী এবং বিভিন্ন কনফিগারেশন সমর্থন করে। এটি সুরক্ষিত পাসওয়ার্ড এনকোডিং এবং সল্টের সাথে উচ্চতর সুরক্ষা প্রদান করে।
উদাহরণ কোড - Argon2PasswordEncoder:
import org.springframework.security.crypto.argon2.Argon2PasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
public class Argon2PasswordEncoderExample {
public static void main(String[] args) {
// Argon2PasswordEncoder তৈরি করা
PasswordEncoder passwordEncoder = new Argon2PasswordEncoder();
// পাসওয়ার্ড এনকোডিং
String rawPassword = "MySecurePassword123!";
String encodedPassword = passwordEncoder.encode(rawPassword);
// এনকোড করা পাসওয়ার্ড প্রিন্ট করা
System.out.println("Encoded Password: " + encodedPassword);
// পাসওয়ার্ড মিলানো
boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);
System.out.println("Password matches: " + matches);
}
}
কীভাবে কাজ করে:
Argon2PasswordEncoder:- এটি পাসওয়ার্ডকে Argon2 হ্যাশিং অ্যালগরিদম ব্যবহার করে এনকোড করে। এটি সমর্থন করে এমন কনফিগারেশনগুলি যেমন টাইম কস্ট, মেমরি কস্ট, এবং প্যারালালিজম ফ্যাক্টর।
encode():- এটি পাসওয়ার্ডকে সল্টসহ এনকোড করে এবং শক্তিশালী হ্যাশিং প্রক্রিয়া ব্যবহার করে এনকোড করা পাসওয়ার্ড প্রদান করে।
matches():- এটি যাচাই করে যে এনকোড করা পাসওয়ার্ডটি উল্লিখিত পাসওয়ার্ডের সাথে মেলে কিনা।
Maven Dependency:
এই দুটি এনকোডার Spring Security লাইব্রেরির অংশ। আপনার প্রকল্পের pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.7.6</version> <!-- সর্বশেষ সংস্করণ ব্যবহার করুন -->
</dependency>
নিরাপদ পাসওয়ার্ড এনকোডিং:
- BCrypt এবং Argon2 উভয়ই শক্তিশালী পাসওয়ার্ড হ্যাশিং অ্যালগরিদম, তবে Argon2 উন্নত নিরাপত্তা এবং কনফিগারেশন অপশন (যেমন মেমরি ব্যবহার এবং প্রক্রিয়াকরণ টাইম) সমর্থন করে, যা এটিকে একটি ভাল পছন্দ করে তোলে যদি আপনি অতিরিক্ত নিরাপত্তা চান।
- BCrypt তুলনামূলকভাবে সহজ এবং এখনও একটি জনপ্রিয় এবং শক্তিশালী পছন্দ, বিশেষত যদি আপনি একটি সিম্পল কনফিগারেশন চান।
এইভাবে, আপনি Passay এর পাসওয়ার্ড পলিসি ভ্যালিডেশন ব্যবহার করতে পারেন এবং Spring Security এর BCryptPasswordEncoder অথবা Argon2PasswordEncoder এর মাধ্যমে পাসওয়ার্ড এনকোডিং নিশ্চিত করতে পারেন।
Passay লাইব্রেরি মূলত পাসওয়ার্ড পলিসি এবং ভ্যালিডেশন প্রক্রিয়া পরিচালনা করে, কিন্তু পাসওয়ার্ড হ্যাশিং এবং এনকোডিং সংক্রান্ত কাজের জন্য অন্য লাইব্রেরি যেমন BCrypt, PBKDF2, বা Argon2 ব্যবহার করা হয়। তবে Passay কে পাসওয়ার্ড ভ্যালিডেশন এবং নিরাপদ পাসওয়ার্ড হ্যাশিংয়ের জন্য একসাথে ব্যবহার করা যেতে পারে।
পাসওয়ার্ড হ্যাশিং এবং এনকোডিং:
Password Hashing হল পাসওয়ার্ডের একটি নিরাপদ ভার্সন তৈরি করার প্রক্রিয়া, যাতে এটি সহজে পুনরুদ্ধার করা না যায়। এনকোডিং, অন্যদিকে, তথ্য পরিবর্তন করে তাকে একটি নির্দিষ্ট ফর্ম্যাটে রূপান্তরিত করে, কিন্তু এটি পুনরুদ্ধারযোগ্য হতে পারে।
এখানে, BCrypt হ্যাশিং এলগরিদম এবং Passay পাসওয়ার্ড ভ্যালিডেশন একসাথে ব্যবহার করা হয়েছে।
উদাহরণ: Passay দিয়ে পাসওয়ার্ড ভ্যালিডেশন এবং BCrypt দিয়ে পাসওয়ার্ড হ্যাশিং
Maven Dependencies:
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.7.3</version>
</dependency>
উদাহরণ কোড:
import org.passay.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.Arrays;
public class PasswordHashingAndValidationExample {
public static void main(String[] args) {
// পাসওয়ার্ডের ভ্যালিডেশন নিয়ম কনফিগার করা
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16), // পাসওয়ার্ডের দৈর্ঘ্য 8-16 অক্ষর
new UppercaseCharacterRule(1), // অন্তত একটি বড় হাতের অক্ষর
new DigitCharacterRule(1), // অন্তত একটি সংখ্যা
new SpecialCharacterRule(1), // অন্তত একটি বিশেষ অক্ষর
new WhitespaceRule() // ফাঁকা স্থান নিষিদ্ধ
));
// নতুন পাসওয়ার্ড
String newPassword = "MySecurePass@123";
// পাসওয়ার্ড ভ্যালিডেশন
RuleResult result = validator.validate(new PasswordData(newPassword));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
// BCrypt দিয়ে পাসওয়ার্ড হ্যাশিং
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(newPassword);
System.out.println("হ্যাশ করা পাসওয়ার্ড: " + hashedPassword);
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
কোড ব্যাখ্যা:
- Passay Validation:
- Passay-এ
PasswordValidatorব্যবহার করে পাসওয়ার্ডের বৈধতা যাচাই করা হয়েছে। এখানে পাসওয়ার্ডের জন্য কিছু নিয়ম সেট করা হয়েছে:- দৈর্ঘ্য 8 থেকে 16 অক্ষর
- অন্তত একটি বড় হাতের অক্ষর
- অন্তত একটি সংখ্যা
- অন্তত একটি বিশেষ চিহ্ন
- কোনো ফাঁকা স্থান থাকবে না
- Passay-এ
- BCrypt Password Hashing:
BCryptPasswordEncoderব্যবহার করে পাসওয়ার্ডটি হ্যাশ করা হয়েছে।encode()পদ্ধতির মাধ্যমে পাসওয়ার্ডটি হ্যাশ করা হয়।- BCrypt হ্যাশিং নিরাপদ পাসওয়ার্ড সংরক্ষণের জন্য খুবই জনপ্রিয় একটি এলগরিদম।
- Password Validation and Hashing Flow:
- প্রথমে পাসওয়ার্ডটি Passay দিয়ে যাচাই করা হয়।
- যদি পাসওয়ার্ডটি বৈধ হয়, তবে BCrypt দিয়ে সেই পাসওয়ার্ডটি হ্যাশ করা হয়।
- যদি পাসওয়ার্ড অবৈধ হয়, তাহলে Passay এর বার্তা দেখানো হয় যা কারণ জানায়।
ফলাফল:
উপরোক্ত কোডে, যদি পাসওয়ার্ড "MySecurePass@123" বৈধ হয় (Passay-এ), তাহলে ফলস্বরূপ আউটপুট হবে:
পাসওয়ার্ড বৈধ!
হ্যাশ করা পাসওয়ার্ড: $2a$10$LyFrqE7zP.f1CgX3iUkMge18jRVDtyo22EO4F1RgVZj56h7ajUeYa
এখানে, $2a$10$ অংশ হচ্ছে BCrypt হ্যাশের স্ট্যান্ডার্ড সূচক, এবং বাকি অংশটি পাসওয়ার্ডের হ্যাশড ভ্যালু।
উল্লেখযোগ্য পয়েন্ট:
- Hashing: BCrypt হ্যাশিং এলগরিদম পাসওয়ার্ড সুরক্ষিতভাবে হ্যাশ করে এবং পুনরুদ্ধারযোগ্য নয়।
- Passay: পাসওয়ার্ডের বৈধতা যাচাই করতে ব্যবহৃত হয় এবং এটি পাসওয়ার্ডে কিছু নির্দিষ্ট নিরাপত্তা পলিসি অনুসরণ করতে সাহায্য করে।
Passay এবং BCrypt একসাথে ব্যবহার করলে একটি শক্তিশালী সিস্টেম তৈরি হয় যা পাসওয়ার্ড নিরাপত্তা এবং সঠিক হ্যাশিং নিশ্চিত করে।
Read more