Passay Java Technologies-এ Advanced Password Constraints তৈরি করা সম্ভব যা পাসওয়ার্ডের নিরাপত্তা নীতি আরও শক্তিশালী করে এবং একাধিক নিরাপত্তা স্তর যোগ করে। এই ধরনের কনস্ট্রেইন্টগুলি পাসওয়ার্ডের বৈধতা যাচাই করতে সাহায্য করে, যেমন পাসওয়ার্ডে একাধিক ধরনের অক্ষর থাকতে হবে, নির্দিষ্ট প্যাটার্ন অনুসরণ করতে হবে, বা কিছু বিশেষ শর্ত মেনে চলতে হবে।
নিচে Advanced Password Constraints এর কিছু উদাহরণ দেওয়া হলো।
কাস্টম প্যাটার্ন রুল ব্যবহার করে আপনি পাসওয়ার্ডে নির্দিষ্ট অক্ষর বা চিহ্নের প্যাটার্ন থাকতে হবে এমন শর্ত সেট করতে পারেন। উদাহরণস্বরূপ, একটি পাসওয়ার্ডের মধ্যে কমপক্ষে একটী ছোট হাতের অক্ষর, একটী বড় হাতের অক্ষর, একটী সংখ্যা, এবং একটী বিশেষ চিহ্ন থাকতে হবে।
import org.passay.*;
import java.util.Arrays;
public class AdvancedPasswordConstraintsExample {
public static void main(String[] args) {
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16), // পাসওয়ার্ডের দৈর্ঘ্য 8-16 অক্ষর
new UppercaseCharacterRule(1), // অন্তত একটি বড় হাতের অক্ষর
new LowercaseCharacterRule(1), // অন্তত একটি ছোট হাতের অক্ষর
new DigitCharacterRule(1), // অন্তত একটি সংখ্যা
new SpecialCharacterRule(1), // অন্তত একটি স্পেশাল ক্যারেক্টার
new WhitespaceRule(), // ফাঁকা স্থান নিষিদ্ধ
new CharacterRule(Character.MIN_CODE_POINT, Character.MAX_CODE_POINT) { // কাস্টম প্যাটার্ন
@Override
public boolean isValid(PasswordData passwordData) {
// এখানে পাসওয়ার্ডের প্যাটার্নের জন্য কাস্টম লজিক যোগ করা যেতে পারে
String password = passwordData.getPassword();
// পাসওয়ার্ডে একাধিক সংখ্যার পর্ব থাকতে হবে
return password.matches(".*\\d.*") && password.matches(".*[a-zA-Z].*");
}
}
));
String password = "MySecure@123";
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
এই কোডে পাসওয়ার্ডে অন্তত একটি সংখ্যা এবং একটি অক্ষর থাকতে হবে, এবং এটি একটি কাস্টম শর্ত মেনে চলে।
পাসওয়ার্ড ইতিহাস রুল ব্যবহার করে আপনি একটি নির্দিষ্ট সংখ্যক পূর্ববর্তী পাসওয়ার্ডের সাথে বর্তমান পাসওয়ার্ডের তুলনা করতে পারেন এবং এটি পুনরায় ব্যবহার করা থেকে বিরত রাখতে পারেন। এটি ব্যবহারকারীদের পাসওয়ার্ড পুনরায় ব্যবহার না করতে সাহায্য করে।
import org.passay.*;
import java.util.Arrays;
public class PasswordHistoryExample {
public static void main(String[] args) {
// পুরনো পাসওয়ার্ডের তালিকা
String[] previousPasswords = {"OldPassword123", "TestPassword2023"};
// পাসওয়ার্ড ইতিহাস চেক রুল
PasswordHistoryRule passwordHistoryRule = new PasswordHistoryRule(2, Arrays.asList(previousPasswords));
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16), // পাসওয়ার্ডের দৈর্ঘ্য 8-16 অক্ষর
new UppercaseCharacterRule(1), // অন্তত একটি বড় হাতের অক্ষর
new LowercaseCharacterRule(1), // অন্তত একটি ছোট হাতের অক্ষর
new DigitCharacterRule(1), // অন্তত একটি সংখ্যা
new SpecialCharacterRule(1), // অন্তত একটি স্পেশাল ক্যারেক্টার
new WhitespaceRule(), // ফাঁকা স্থান নিষিদ্ধ
passwordHistoryRule // পাসওয়ার্ড ইতিহাস যাচাই
));
String password = "OldPassword123"; // এটি পুরনো পাসওয়ার্ডের তালিকায় রয়েছে
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
এখানে, "OldPassword123" পাসওয়ার্ডটি পুরনো পাসওয়ার্ডের তালিকায় রয়েছে, তাই এটি অবৈধ হবে।
আপনি পাসওয়ার্ডের প্রতিটি অক্ষরের জন্য আলাদা শর্ত নির্ধারণ করতে পারেন। যেমন, কিছু অক্ষরের জন্য শুধুমাত্র বড় হাতের অক্ষর, কিছু জন্য শুধুমাত্র ছোট হাতের অক্ষর, এবং কিছু জন্য নির্দিষ্ট স্পেশাল চিহ্ন হতে হবে।
import org.passay.*;
import java.util.Arrays;
public class CustomCharacterRuleExample {
public static void main(String[] args) {
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(10, 20), // পাসওয়ার্ডের দৈর্ঘ্য 10-20 অক্ষর
new UppercaseCharacterRule(2), // অন্তত দুটি বড় হাতের অক্ষর
new LowercaseCharacterRule(2), // অন্তত দুটি ছোট হাতের অক্ষর
new DigitCharacterRule(2), // অন্তত দুটি সংখ্যা
new SpecialCharacterRule(2), // অন্তত দুটি স্পেশাল ক্যারেক্টার
new WhitespaceRule() // ফাঁকা স্থান নিষিদ্ধ
));
String password = "Passw0rd@123"; // নির্ধারিত শর্ত পূর্ণ করেছে
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
এখানে, পাসওয়ার্ডে নির্দিষ্ট সংখ্যক বড় হাতের অক্ষর, ছোট হাতের অক্ষর, সংখ্যা, এবং স্পেশাল ক্যারেক্টার থাকতে হবে।
Passay-এর মাধ্যমে Advanced Password Constraints তৈরি করে আপনি পাসওয়ার্ডের নিরাপত্তা আরও বাড়াতে পারেন এবং একাধিক কাস্টম নিয়ম বা শর্ত সংযোজন করতে পারেন। এই ধরনের শর্তগুলি পাসওয়ার্ডের কমপ্লেক্সিটি বাড়িয়ে আপনার সিস্টেমের নিরাপত্তা নিশ্চিত করতে সহায়ক।
Passay Java লাইব্রেরির IllegalSequenceRule এবং RepeatCharacterRegexRule দুটি গুরুত্বপূর্ণ rule যা পাসওয়ার্ড ভ্যালিডেশন এবং নিরাপত্তা বাড়াতে ব্যবহৃত হয়। এই দুটি rule ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে পাসওয়ার্ডে অবাঞ্ছিত সিকোয়েন্স বা একে অপরের পরিপূরক অক্ষরের পুনরাবৃত্তি নেই, যা নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে।
এই rule পাসওয়ার্ডে অবাঞ্ছিত সিকোয়েন্স (যেমন "abc", "123" বা "xyz") থাকলে তা অবৈধ হিসেবে গণ্য করে। এটি সাধারণত এমন সিকোয়েন্স গুলি নিষিদ্ধ করতে ব্যবহৃত হয় যা সহজে অনুমানযোগ্য বা নিরাপত্তার জন্য দুর্বল।
import org.passay.*;
import java.util.Arrays;
public class IllegalSequenceRuleExample {
public static void main(String[] args) {
// IllegalSequenceRule নিষিদ্ধ করবে "abc" বা "123" সিকোয়েন্স
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16),
new IllegalSequenceRule("abc", 3, false), // নিষিদ্ধ সিকোয়েন্স
new IllegalSequenceRule("123", 3, false) // নিষিদ্ধ সিকোয়েন্স
));
String password = "mypassword123";
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
true
থাকে, তবে সিকোয়েন্সটি বড় এবং ছোট হাতের অক্ষরের মধ্যে পার্থক্য করবে না।এই rule পাসওয়ার্ডে একাধিক একই অক্ষরের পুনরাবৃত্তি থাকা নিষিদ্ধ করে। উদাহরণস্বরূপ, "aaaa", "1111" ইত্যাদি ধরনের পুনরাবৃত্তি অক্ষর পরবর্তী নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে, সেগুলি এই rule দ্বারা নিষিদ্ধ করা হয়।
import org.passay.*;
import java.util.Arrays;
public class RepeatCharacterRegexRuleExample {
public static void main(String[] args) {
// RepeatCharacterRegexRule নিষিদ্ধ করবে একাধিক পুনরাবৃত্তি অক্ষর
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16),
new RepeatCharacterRegexRule(3) // একই অক্ষরের ৩টি বা তার বেশি পুনরাবৃত্তি নিষিদ্ধ
));
String password = "myaaaa1234"; // পুনরাবৃত্তি অক্ষর আছে
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
3
হলে একই অক্ষরের তিনটি বা তার বেশি পুনরাবৃত্তি পাসওয়ার্ডে থাকতে পারবে না।এই দুটি rule ব্যবহারের মাধ্যমে আপনি পাসওয়ার্ডের নিরাপত্তা আরও দৃঢ় করতে পারেন এবং পাসওয়ার্ডের দুর্বলতার জন্য সাধারণ কিছু প্যাটার্ন বা পুনরাবৃত্তি অক্ষর গুলি এড়াতে পারেন।
AllowedRegexRule
হল Passay লাইব্রেরির একটি ক্লাস যা পাসওয়ার্ডের জন্য একটি নির্দিষ্ট রেগুলার এক্সপ্রেশন (regex) প্যাটার্নের সাথে সঙ্গতিপূর্ণ হতে হবে তা নিশ্চিত করে। এটি সাধারণত ব্যবহার করা হয় যখন আপনি পাসওয়ার্ডের মধ্যে কিছু নির্দিষ্ট ধরনের ক্যারেক্টার বা প্যাটার্ন অনুমোদন করতে চান। উদাহরণস্বরূপ, আপনি যদি চান যে পাসওয়ার্ডটি শুধুমাত্র নির্দিষ্ট অক্ষর বা সংখ্যা অন্তর্ভুক্ত করুক, তবে আপনি AllowedRegexRule
ব্যবহার করতে পারেন।
AllowedRegexRule
ব্যবহারএখানে একটি উদাহরণ দেওয়া হচ্ছে যেখানে পাসওয়ার্ডে শুধুমাত্র নির্দিষ্ট প্যাটার্নের অক্ষর (যেমন ছোট হাতের অক্ষর এবং সংখ্যা) অনুমোদিত থাকবে:
import org.passay.*;
import java.util.Arrays;
public class AllowedRegexRuleExample {
public static void main(String[] args) {
// AllowedRegexRule ব্যবহার করা হচ্ছে শুধুমাত্র ছোট হাতের অক্ষর এবং সংখ্যা অনুমোদন করতে
AllowedRegexRule allowedRegexRule = new AllowedRegexRule("[a-z0-9]+");
PasswordValidator validator = new PasswordValidator(Arrays.asList(
allowedRegexRule, // শুধুমাত্র ছোট হাতের অক্ষর এবং সংখ্যা অনুমোদিত
new LengthRule(8, 16) // পাসওয়ার্ডের দৈর্ঘ্য 8-16 অক্ষর হতে হবে
));
String password = "mypassword123";
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
"[a-z0-9]+"
প্যাটার্ন ব্যবহার করেছি, যা শুধুমাত্র ছোট হাতের অক্ষর এবং সংখ্যা অনুমোদন করে।পাসওয়ার্ড বৈধ!
যদি পাসওয়ার্ডের মধ্যে অ-অনুমোদিত অক্ষর থাকে (যেমন বড় হাতের অক্ষর বা স্পেশাল ক্যারেক্টার), তাহলে এটি অবৈধ হিসেবে গণ্য হবে এবং এর সাথে সম্পর্কিত একটি ত্রুটি বার্তা দেখাবে।
"[a-zA-Z0-9]+"
— ছোট এবং বড় হাতের অক্ষর এবং সংখ্যা অনুমোদন।"[a-z]+[0-9]+"
— প্রথমে ছোট হাতের অক্ষর, পরে সংখ্যা থাকতে হবে।"^[A-Za-z0-9]*$"
— শুধুমাত্র ইংরেজি অক্ষর এবং সংখ্যা অনুমোদিত।এভাবে, আপনি পাসওয়ার্ডের জন্য আপনার প্রয়োজনীয় প্যাটার্ন নিয়ন্ত্রণ করতে পারেন।
প্যাসে (Passay) Java লাইব্রেরি পাসওয়ার্ড সিকিউরিটি নিয়ম প্রয়োগে অত্যন্ত শক্তিশালী এবং কাস্টমাইজেবল ফিচার প্রদান করে। এর মাধ্যমে আপনি Advanced Constraints এবং Rules প্রয়োগ করতে পারেন, যা পাসওয়ার্ডের শক্তি এবং নিরাপত্তা বাড়াতে সহায়ক।
নিচে কিছু Advanced Constraints এবং Rules এর উদাহরণ দেয়া হলো।
পাসওয়ার্ডের সর্বনিম্ন এবং সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করতে ব্যবহৃত হয়।
// পাসওয়ার্ডের দৈর্ঘ্য 8-16 অক্ষরের মধ্যে থাকতে হবে
new LengthRule(8, 16)
এটি নিশ্চিত করে যে পাসওয়ার্ডে অন্তত একটি বড় হাতের অক্ষর এবং একটি ছোট হাতের অক্ষর থাকতে হবে।
// অন্তত একটি বড় হাতের অক্ষর (Uppercase) এবং একটি ছোট হাতের অক্ষর (Lowercase) থাকা উচিত
new UppercaseCharacterRule(1),
new LowercaseCharacterRule(1)
এটি পাসওয়ার্ডে অন্তত একটি সংখ্যা থাকতে হবে।
// অন্তত একটি সংখ্যা (digit) থাকা উচিত
new DigitCharacterRule(1)
এটি নিশ্চিত করে যে পাসওয়ার্ডে অন্তত একটি বিশেষ অক্ষর (যেমন !
, @
, #
, $
ইত্যাদি) থাকতে হবে।
// অন্তত একটি স্পেশাল ক্যারেক্টার থাকা উচিত
new SpecialCharacterRule(1)
এটি নিষিদ্ধ পাসওয়ার্ড বা শব্দের তালিকা ব্যবহার করে। আপনি একটি কাস্টম তালিকা তৈরি করে নিষিদ্ধ শব্দগুলি চেক করতে পারেন।
// নিষিদ্ধ পাসওয়ার্ড তালিকা (এটি ব্যবহারকারীর পাসওয়ার্ডের সাথে মিল খুঁজবে)
new BlacklistRule(new WordListDictionary(new File("path/to/blacklist.txt")))
এটি নিশ্চিত করে যে পাসওয়ার্ডে বিভিন্ন ধরনের অক্ষর থাকবে, যেমন সংখ্যা, বর্ণ (uppercase, lowercase) এবং স্পেশাল ক্যারেক্টার।
// পাসওয়ার্ডে অন্তত দুটি ভিন্ন ধরনের অক্ষর থাকতে হবে (কমপক্ষে দুটি ভিন্ন ক্যারেক্টার ক্লাস)
new CharacterClassRule(2)
এটি পাসওয়ার্ডে অভিধান ভিত্তিক শব্দ ব্যবহার করা নিষিদ্ধ করে। উদাহরণস্বরূপ, সাধারণ ইংরেজি শব্দগুলি বা ব্যক্তিগত তথ্য (যেমন নাম, জন্ম তারিখ) নিষিদ্ধ করা।
// পাসওয়ার্ডে অভিধানভিত্তিক শব্দ থাকা উচিত নয়
new DictionaryRule(new FileDictionary(new File("path/to/dictionary.txt")))
এটি পাসওয়ার্ডে ব্যবহারকারীর নাম ব্যবহার নিষিদ্ধ করে।
// পাসওয়ার্ডে ব্যবহারকারীর নাম থাকা উচিত নয়
new UsernameRule()
import org.passay.*;
import java.util.Arrays;
public class AdvancedPasswordValidator {
public static void main(String[] args) {
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 16), // দৈর্ঘ্য 8-16
new UppercaseCharacterRule(1), // অন্তত একটি uppercase character
new LowercaseCharacterRule(1), // অন্তত একটি lowercase character
new DigitCharacterRule(1), // অন্তত একটি সংখ্যা
new SpecialCharacterRule(1), // অন্তত একটি স্পেশাল ক্যারেক্টার
new BlacklistRule(new WordListDictionary(new File("path/to/blacklist.txt"))), // নিষিদ্ধ পাসওয়ার্ড
new CharacterClassRule(2), // দুটি ভিন্ন ধরনের ক্যারেক্টার
new DictionaryRule(new FileDictionary(new File("path/to/dictionary.txt"))), // অভিধান ভিত্তিক শব্দ নিষিদ্ধ
new UsernameRule() // ব্যবহারকারীর নাম ব্যবহার নিষিদ্ধ
));
String password = "MySecure@123";
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
System.out.println("পাসওয়ার্ড বৈধ!");
} else {
System.out.println("পাসওয়ার্ড অবৈধ। কারণ:");
validator.getMessages(result).forEach(System.out::println);
}
}
}
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.6.0</version>
</dependency>
প্যাসে লাইব্রেরি ব্যবহারের মাধ্যমে আপনি পাসওয়ার্ডের শক্তিশালী নিয়ম এবং নিরাপত্তা প্রয়োজনীয়তাগুলি খুব সহজেই প্রয়োগ করতে পারেন। এর Advanced Constraints এবং Rules যেমন Blacklist, Dictionary, এবং Character Class Diversity আপনাকে পাসওয়ার্ড শক্তিশালী করতে এবং সিস্টেমের সিকিউরিটি বজায় রাখতে সাহায্য করবে।
Read more