পাসওয়ার্ড জেনারেটর ও ভ্যালিডেটর টুল
প্রফেশনাল পাসওয়ার্ড জেনারেটর ও ভ্যালিডেটর টুল যা শক্তিশালী পাসওয়ার্ড এবং স্মরণীয় পাসফ্রেজ তৈরি করে, ব্যাচ জেনারেশন, ইউনিকনেস গ্যারান্টি, শক্তি মূল্যায়ন এবং পলিসি যাচাইয়ের সাপোর্টসহ। এখানে রয়েছে ক্রিপ্টোগ্রাফিক্যালি সুরক্ষিত র্যান্ডম সোর্স, কনফিগারযোগ্য ক্যারাক্টার সেট, অনুরূপ ক্যারাক্টার ফিল্টারিং, ব্যাচ ডুপ্লিকেশন পরিসংখ্যান এবং এক-ক্লিক কপি ফাংশনালিটি। এছাড়াও বহুভাষিক কোডের উদাহরণ, পাসওয়ার্ড নলেজ বেস, সুরক্ষার সেরা প্রাকটিস এবং পলিসি টেস্টিং টুল অন্তর্ভুক্ত। সমস্ত কাজ আপনার ব্রাউজারে স্থানীয়ভাবে করা হয়, যা গোপনীয়তা ও সুরক্ষা নিশ্চিত করে।
পাসওয়ার্ড পলিসি টেস্টার
- দৈর্ঘ্য
- ছোট অক্ষর
- বড় অক্ষর
- সংখ্যা
- প্রতীক
- ক্রমিক
- পুনরাবৃত্তি
- ব্লকলিস্ট
পাসফ্রেজ জেনারেটর
পাসওয়ার্ড হ্যাশিং চিট শীট
- যুক্তিসঙ্গত মেমরি-কঠোর প্যারামিটার সহ Argon2id ব্যবহার করুন
- সময় ≥ 2 পাস, মেমরি ≥ 64MB (পরিবেশ অনুযায়ী সামঞ্জস্য করুন)
- প্রতি ব্যবহারকারীর জন্য একটি অনন্য লবণ সংরক্ষণ করুন; ঐচ্ছিকভাবে অ্যাপ্লিকেশন স্তরে একটি পিপার ব্যবহার করুন
- ≥ 210k পুনরাবৃত্তি সহ SHA-256 বা SHA-512 চয়ন করুন (প্রয়োজন অনুযায়ী সামঞ্জস্য করুন)
- প্রতিটি হ্যাশের জন্য একটি অনন্য লবণ ব্যবহার করুন; প্যারামিটার আপগ্রেড সমর্থন করুন
- ব্যবহারকারীর পরবর্তী লগইনের সময় উচ্চ-ব্যয়ের প্যারামিটারে স্থানান্তর করুন
- সার্ভারের ক্ষমতার উপর নির্ভর করে 10–14 এর মধ্যে খরচ সেট করুন
- ছাঁটাই সমস্যা এড়িয়ে চলুন; পুরো পাসওয়ার্ডটি হ্যাশ করুন
- প্রমাণীকরণ এন্ডপয়েন্টে রেট লিমিটিং এবং মনিটরিং প্রয়োগ করুন
পাসওয়ার্ড স্ট্রেন্থ ইভালুয়েটর
স্ট্রেন্থকে এনট্রপি দিয়ে আনুমানিক করা হয়: এনট্রপি = লগ2(ক্যারাক্টার পুলের আকার) × দৈর্ঘ্য। বৃহত্তর ক্যারাক্টার পুল এবং দীর্ঘ দৈর্ঘ্য অনুমান প্রতিরোধে সহায়ক।
- দুর্বল: < 50 বিট —— শুধুমাত্র এককালীন বা কম মূল্যের পরিস্থিতির জন্য উপযুক্ত
- মাঝারি: 50–80 বিট —— কম ঝুঁকিপূর্ণ পরিস্থিতির জন্য গ্রহণযোগ্য
- শক্তিশালী: 80–110 বিট —— প্রস্তাবিত ডিফল্ট লক্ষ্য
- চমৎকার: > 110 বিট —— অ্যাডমিন বা গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য প্রস্তাবিত
দ্রষ্টব্য: বাস্তব বিশ্বের আক্রমণের মডেল ভিন্ন হতে পারে; পাসওয়ার্ড পুনরায় ব্যবহার এড়িয়ে চলুন এবং মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) সক্রিয় করুন।
কীভাবে ব্যবহার করবেন
- দৈর্ঘ্য ও ক্যারাক্টার সেট নির্বাচন করুন (ছোট হাত/বড় হাত/অঙ্ক/সিম্বল); ঐচ্ছিকভাবে 'অনুরূপ এড়ান' ও 'প্রতিটি প্রয়োজন' সক্রিয় করুন
- বিস্তারিত নিয়ন্ত্রণের জন্য: নির্দিষ্ট ক্যারাক্টার বা ক্যারাক্টার গ্রুপ বাদ দিন, অথবা সিম্বল সাবসেট বেছে নিন
- কতগুলো পাসওয়ার্ড জেনারেট করবেন তা বেছে নিন, তারপর জেনারেট এ ক্লিক করুন; ব্যাচের ফলাফল স্বয়ংক্রিয়ভাবে ডুপ্লিকেট রহিত করা হয় এবং একবারে সবগুলো কপি করা যায়
- বিদ্যমান পাসওয়ার্ড যাচাই করার জন্য পলিসি টেস্টার ব্যবহার করুন; স্মরণীয় পাসফ্রেজের জন্য পাসফ্রেজ জেনারেটর ব্যবহার করুন
বৈশিষ্ট্য
- ক্রিপ্টোগ্রাফিক্যালি সুরক্ষিত র্যান্ডম সোর্স (Web Crypto)
- কনফিগারযোগ্য ক্যারাক্টার সেট ও সিম্বল গ্রুপ
- অনুরূপ ক্যারাক্টার ফিল্টারিং ও কাস্টম এক্সক্লুজন
- ১-১০০টি পাসওয়ার্ডের ব্যাচ তৈরি, সবসময় অদ্বিতীয়
- শক্তি ও এনট্রপি মেট্রিক্স
- পলিসি টেস্টার ও পাসফ্রেজ জেনারেটর
- বহুভাষিক কোডের উদাহরণ
- এক-ক্লিক কপি (একক বা সব)
পাসওয়ার্ড নলেজ বেস
- এনট্রপি ≈ log2(ক্যারাক্টার সেটের আকার) × দৈর্ঘ্য; দৈর্ঘ্য সাধারণত বেশি অবদান রাখে
- প্রস্তাবিত লক্ষ্য: সাধারণ অ্যাকাউন্ট ≥ 80 বিট; উচ্চ-বিশেষাধিকারী/আর্থিক অ্যাকাউন্ট ≥ 110 বিট
- বড় ক্যারাক্টার সেট + দীর্ঘ দৈর্ঘ্য → অনুমান করার বিরুদ্ধে বেশি প্রতিরোধ ক্ষমতা
- প্রতীক যুক্ত করা দৈর্ঘ্য বাড়ানোর চেয়ে কম কার্যকর
- পূর্বাভাসযোগ্য প্যাটার্ন এড়িয়ে চলুন (উদাহরণস্বরূপ: সর্বদা 'প্রথমে বড় হাতের অক্ষর + শেষে সংখ্যা!')
- পর্যাপ্ত দৈর্ঘ্যকে অগ্রাধিকার দিন, তারপর মাঝারিভাবে ক্যারাক্টার বৈচিত্র্য বাড়ান
- কীবোর্ডের সিকোয়েন্স (উদাহরণস্বরূপ: qwerty), পুনরাবৃত্তি ব্লক, জন্মদিন/বছর নিয়ম দ্বারা সহজেই লক্ষ্যবস্তু হয়
- 'রুট পাসওয়ার্ড + সাইট সাফিক্স' ব্যবহার করা ভেরিয়েন্ট পুনঃব্যবহার তৈরি করে, ঝুঁকি ঘনীভূত করে এবং পাসওয়ার্ডকে সহজে অনুমানযোগ্য করে তোলে
- একই পাসওয়ার্ড একাধিক ওয়েবসাইটে কখনোই পুনরায় ব্যবহার করবেন না
- পাসওয়ার্ড ম্যানেজার ব্যবহার করুন; প্রতি সাইটের জন্য ইউনিক পাসওয়ার্ড নিশ্চিত করুন; গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য MFA সক্রিয় করুন
- সর্বজনীন চ্যানেলে প্লেইন টেক্সটে পাসওয়ার্ড প্রেরণ করা এড়িয়ে চলুন; প্রয়োজনে 'উচ্চারযোগ্য' পাসফ্রেজ ব্যবহার করুন
- লিক হয়েছে বা পুনরায় ব্যবহার করা হয়েছে সনাক্ত হলে অবিলম্বে পাসওয়ার্ড পরিবর্তন করুন ও ইউনিক করুন
- 4–6টি এলোমেলো শব্দের সমন্বয় সাধারণত শক্তিশালী এবং স্মরণীয় হয়
- শক্তি ও পাঠযোগ্যতা বাড়ানোর জন্য বিভাজক ব্যবহার করুন, প্রাথমিক অক্ষরের বড় হাতের ব্যবহার করুন এবং সংখ্যা যুক্ত করুন
- সাধারণ বাক্য, গানের গান বা বিখ্যাত উক্তি সরাসরি সংযোগ করা এড়িয়ে চলুন
পাসওয়ার্ডের সুরক্ষার সেরা প্রাকটিস
- পর্যাপ্ত দৈর্ঘ্য ব্যবহার করুন: সাধারণ অ্যাকাউন্টের জন্য 16+ অক্ষর, গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য 24+ অক্ষর
- স্মরণযোগ্যতার জন্য পাসফ্রেজকে অগ্রাধিকার দিন; র্যান্ডম, উচ্চ-শক্তির পাসওয়ার্ড সংরক্ষণের জন্য পাসওয়ার্ড ম্যানেজার ব্যবহার করুন
- যখনই সম্ভব মাল্টি-ফ্যাক্টর প্রমাণীকরণ (MFA) সক্রিয় করুন
- সাইট জুড়ে কখনো পাসওয়ার্ড পুনরায় ব্যবহার করবেন না—প্রতিটি অ্যাকাউন্টের জন্য একটি অনন্য পাসওয়ার্ড থাকা উচিত
দৈর্ঘ্য ও অক্ষর সেটের আকারের উপর ভিত্তি করে এনট্রপি অনির্ধারণযোগ্যতা পরিমাপ করে—এনট্রপি বিট যত বেশি হবে, পাসওয়ার্ড সাধারণত তত শক্তিশালী হবে।
- সর্বোচ্চ শক্তি লাভের জন্য দৈর্ঘ্য বাড়ানোকে অগ্রাধিকার দিন
- যখন সম্ভব হবে একাধিক অক্ষর সেট ব্যবহার করুন
- খুব বেশি অক্ষর বাদ দিলে অক্ষর পুল হ্রাস পায় এবং শক্তি দুর্বল হয়ে পড়ে
- জটিল সংমিশ্রণের নিয়মের পরিবর্তে দৈর্ঘ্যের প্রয়োজনীয়তা ও সাধারণ/লিক হওয়া পাসওয়ার্ডের ব্ল্যাকলিস্টকে অগ্রাধিকার দিন
- বারবার বাধ্যতামূলক রোটেশন এড়িয়ে চলুন; শুধুমাত্র কোনো লঙ্ঘন বা ঝুঁকি সনাক্ত হলে পাসওয়ার্ড পরিবর্তন করুন
- সাধারণভাবে ব্যবহৃত বা লিক হওয়া পাসওয়ার্ড ব্লক করতে আপোস করা পাসওয়ার্ডের তালিকা ব্যবহার করুন
- বিভাজক দিয়ে যুক্ত 4–6টি র্যান্ডম শব্দ ব্যবহার করুন, যেমন: lake-CARROT-planet_7
- বিখ্যাত উক্তি, গানের গান বা অন্যান্য সাধারণ বাক্য এড়িয়ে চলুন; 'চতুরতার' চেয়ে র্যান্ডমতা বেশি গুরুত্বপূর্ণ
- গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য প্রকৃতপক্ষে উচ্চ-এনট্রপি র্যান্ডম পাসওয়ার্ড সংরক্ষণ করতে পাসওয়ার্ড ম্যানেজার ব্যবহার করুন
- "প্রতিটি নির্বাচিত সেট প্রয়োজন করুন" নিশ্চিত করে যে প্রতিটি নির্বাচিত ক্যাটাগরি থেকে কমপক্ষে একটি অক্ষর উপস্থিত হবে
- "সদৃশ এড়িয়ে চলুন" পাঠযোগ্যতা উন্নত করে কিন্তু অক্ষর পুলের আকার সামান্য হ্রাস করে
- লক্ষ্য সিস্টেম দ্বারা সমর্থিত সাবসেটে প্রতীক সীমাবদ্ধ করা যায়
- পাসওয়ার্ড কখনো প্লেইনটেক্সটে স্টোরেজ করবেন না; সল্ট সহ শক্তিশালী হ্যাশিং (Argon2id/PBKDF2/Bcrypt) ব্যবহার করুন
- প্যারামিটার (মেমরি/সময়/খরচ) যথাযথভাবে কনফিগার করুন; প্রয়োজন হলে পিপার ব্যবহার করার বিষয়টি বিবেচনা করুন
- লগইন প্রচেষ্টার রেট সীমিত করুন এবং ব্যর্থতা নিরীক্ষণ করুন; আক্রমণের সময় CAPTCHA বা ডিভাইস যাচাইকরণ প্রয়োগ করুন
- TOTP বা হার্ডওয়্যার কীকে অগ্রাধিকার দিন; যখনই সম্ভব SMS এড়িয়ে চলুন
- মাল্টি-ফ্যাক্টর বা ইমেল যাচাইকরণের মাধ্যমে পুনরুদ্ধার প্রক্রিয়াকে সুরক্ষিত করুন এবং কুলডাউন পিরিয়ড প্রয়োগ করুন
- ব্যাকআপ পুনরুদ্ধার কোড প্রদান করুন এবং ব্যবহারকারীদের সেগুলো সুরক্ষিতভাবে সংরক্ষণ করতে উৎসাহিত করুন
- IP/ডিভাইস ঝুঁকি স্কোরিং সহ প্রগতিশীল বিলম্ব বা লক প্রয়োগ করুন
- API ও লগইন ফর্মে WAF ও রেট লিমিটিং প্রয়োগ করুন
- ক্রেডেনশিয়াল স্টাফিং নিরীক্ষণ করুন এবং ব্যবহারকারীদের অনন্য পাসওয়ার্ড গ্রহণ করতে উৎসাহিত করুন
- স্টোরেজ ও স্বয়ংক্রিয়-পূরণের জন্য একটি নামকরণযোগ্য পাসওয়ার্ড ম্যানেজার ব্যবহার করুন
- চ্যাট বা ইমেইলের মাধ্যমে কখনোই প্লেইনটেক্সটে পাসওয়ার্ড শেয়ার করবেন না; দলের জন্য সিক্রেট ম্যানেজমেন্ট টুল ব্যবহার করুন
- অফলাইনে পাসওয়ার্ড লিখে রাখলে শারীরিক নিরাপত্তা নিশ্চিত করুন
প্রোগ্রামিং ভাষার মাধ্যমে পাসওয়ার্ড তৈরি করার পদ্ধতি
function randomPassword(length = 16, sets = {lower:true, upper:true, digits:true, symbols:true}) {
const pools = {
lower: 'abcdefghijklmnopqrstuvwxyz',
upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
digits: '0123456789',
symbols: '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
};
let pool = '';
for (const k of Object.keys(sets)) if (sets[k]) pool += pools[k];
if (!pool) throw new Error('No charset');
// Rejection sampling removes modulo bias
const limit = Math.floor(0x100000000 / pool.length) * pool.length;
const buf = new Uint32Array(1);
let out = '';
for (let i = 0; i < length; i++) {
do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
out += pool[buf[0] % pool.length];
}
return out;
}
import secrets
def random_password(length=16, lower=True, upper=True, digits=True, symbols=True):
pools = {
'lower': 'abcdefghijklmnopqrstuvwxyz',
'upper': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits': '0123456789',
'symbols': '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
}
pool = ''.join(v for k, v in pools.items() if locals()[k])
if not pool:
raise ValueError('No charset')
return ''.join(secrets.choice(pool) for _ in range(length))
function random_password($length = 16, $sets = ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]) {
$pools = [
'lower' => 'abcdefghijklmnopqrstuvwxyz',
'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits' => '0123456789',
'symbols' => '!@#$%^&*+-=_~`|/?()[]{}<>,.;:\'\"'
];
$pool = '';
foreach ($sets as $k => $on) if ($on) $pool .= $pools[$k];
if ($pool === '') throw new Exception('No charset');
$out = '';
for ($i = 0; $i < $length; $i++) {
$out .= $pool[random_int(0, strlen($pool)-1)];
}
return $out;
}
package main
import (
"crypto/rand"
"math/big"
)
func RandomPassword(length int, pool string) (string, error) {
out := make([]byte, length)
for i := 0; i < length; i++ {
nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(pool))))
if err != nil { return "", err }
out[i] = pool[nBig.Int64()]
}
return string(out), nil
}
import java.security.SecureRandom;
public class Pw {
static final String POOL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
static final SecureRandom SR = new SecureRandom();
static String randomPassword(int length) {
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
int idx = SR.nextInt(POOL.length());
sb.append(POOL.charAt(idx));
}
return sb.toString();
}
}
using System;
using System.Security.Cryptography;
public static class Pw {
public static string RandomPassword(int length, string pool) {
// GetInt32 draws an unbiased value in [0, pool.Length)
var chars = new char[length];
for (int i = 0; i < length; i++) {
chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
}
return new string(chars);
}
}
use rand::rngs::OsRng;
use rand::Rng;
fn random_password(length: usize, pool: &str) -> String {
// gen_range is uniform, so there is no modulo bias
let chars: Vec = pool.chars().collect();
(0..length)
.map(|_| chars[OsRng.gen_range(0..chars.len())])
.collect()
}
fn main() {
let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
let pw = random_password(16, pool);
println!("{}", pw);
}