পাসওয়ার্ড জেনারেটর এবং যাচাইকরণ টুল

শক্তিশালী পাসওয়ার্ড এবং পাসফ্রেজ তৈরি করুন, ব্যাচ, অনন্যতা, শক্তি এবং নীতি যাচাইকরণ সমর্থন করে, এবং বহুভাষিক কোড উদাহরণ এবং ব্যবহারিক জ্ঞান প্রদান করে।

পাসওয়ার্ড জেনারেটর

সংখ্যা
প্রতীক গ্রুপ বাছাই করুন
টিপ: গ্রুপ বাছাই করে বা সরাসরি অক্ষরে ক্লিক করে বাদ দিতে পারেন।
ফলাফল

পাসওয়ার্ড নীতি পরীক্ষক

ফলাফল
  • দৈর্ঘ্য
  • ছোট হাতের অক্ষর
  • বড় হাতের অক্ষর
  • অঙ্ক
  • প্রতীক
  • ক্রমিক ধারাবাহিকতা
  • পুনরাবৃত্তি
  • ব্ল্যাকলিস্ট
সমস্ত যাচাইকরণ আপনার ব্রাউজারে স্থানীয়ভাবে সম্পন্ন হয়।

পাসফ্রেজ জেনারেটর

শব্দগুলি সুরক্ষিত র‍্যান্ডম (Web Crypto) দ্বারা নির্বাচিত হয়। ডেমো শব্দসমূহ আকারের সীমাবদ্ধতার কারণে সংক্ষিপ্ত।

পাসওয়ার্ড হ্যাশ রেফারেন্স টেবিল

Argon2id
  • Argon2id ব্যবহার করুন এবং যথাযথ মেমোরি-হার্ড প্যারামিটার সেট করুন
  • সময় ≥ 2 পাস, মেমোরি ≥ 64MB (পরিবেশ অনুযায়ী অপ্টিমাইজ করুন)
  • প্রতিটি ব্যবহারকারীর জন্য স্বতন্ত্র সল্ট সঞ্চয় করুন; অ্যাপ্লিকেশন লেয়ারে পেপার ব্যবহার করা যেতে পারে
PBKDF2
  • SHA-256 বা SHA-512 বেছে নিন, ইটারেশন ≥ 210k (প্রয়োজন অনুযায়ী অপ্টিমাইজ করুন)
  • প্রতিটি হ্যাশের জন্য অনন্য সল্ট ব্যবহার করুন; প্যারামিটার আপগ্রেড সমর্থন করে
  • পরবর্তী লগইনে ব্যবহারকারীকে উচ্চতর খরচ প্যারামিটারে স্থানান্তর করুন
BCrypt
  • খরচ 10–14, সার্ভারের ক্ষমতার উপর নির্ভর করে
  • কাটিয়ে ফেলার সমস্যা এড়ান; সম্পূর্ণ পাসওয়ার্ডের জন্য হ্যাশ করুন
  • অথেন্টিকেশন এন্ডপয়েন্টে লিমিটিং এবং মনিটরিং করুন
উৎস: NIST SP 800-63B, OWASP ASVS। প্যারামিটারগুলি হার্ডওয়্যার ক্ষমতা এবং SLO-এর সাথে মেলানো উচিত।

পাসওয়ার্ড শক্তি মূল্যায়ন

শক্তি প্রায় এনট্রপি দ্বারা নির্ধারিত: entropy = log2(অক্ষর পুলের আকার) × দৈর্ঘ্য। বড় অক্ষর পুল এবং দীর্ঘতর দৈর্ঘ্য অনুমান প্রতিরোধে সহায়তা করে।

  • দুর্বল: < 50 বিট —— কেবলমাত্র একবারের জন্য/কম মূল্যের পরিস্থিতিতে উপযুক্ত
  • সাধারণ: 50–80 বিট —— কম ঝুঁকিপূর্ণ পরিস্থিতিতে গ্রহণযোগ্য
  • শক্তিশালী: 80–110 বিট —— ডিফল্ট লক্ষ্য হিসাবে সুপারিশকৃত
  • অত্যন্ত শক্তিশালী: > 110 বিট —— অ্যাডমিন/গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য উপযুক্ত

টিপ: বাস্তব আক্রমণ মডেলগুলি ভিন্ন হতে পারে; পাসওয়ার্ড পুনরায় ব্যবহার এড়িয়ে চলুন এবং মাল্টি-ফ্যাক্টর অথেনটিকেশন (MFA) সক্রিয় করুন।

ব্যবহার নির্দেশাবলী

  • দৈর্ঘ্য এবং অক্ষর সেট (ছোট হর/বড় হর/অঙ্ক/প্রতীক) নির্বাচন করুন; প্রয়োজনে 'অনুরূপ বর্জন' এবং 'প্রতিটি প্রয়োগ করুন' সক্রিয় করুন
  • আরও সূক্ষ্ম নিয়ন্ত্রণের জন্য: অক্ষর/অক্ষর গ্রুপ বাদ দিন বা প্রতীক গ্রুপ নির্বাচন করুন
  • জেনারেট ক্লিক করুন; একাধিক ফলাফল প্রয়োজন হলে, ব্যাচ জেনারেশন সক্রিয় করুন এবং সবকিছু একক ক্লিকে কপি করুন
  • বিদ্যমান পাসওয়ার্ড যাচাই করতে, 'নীতি পরীক্ষক' ব্যবহার করুন; সহজে মনে রাখার পাসফ্রেজ চাইলে, 'পাসফ্রেজ জেনারেটর' ব্যবহার করুন

বৈশিষ্ট্যসমূহ

  • সুরক্ষিত র‍্যান্ডম সোর্স (Web Crypto)
  • কনফিগারযোগ্য অক্ষর সেট এবং প্রতীক গ্রুপ
  • অনুরূপ অক্ষর ফিল্টারিং এবং কাস্টম বাদ দেওয়া
  • ব্যাচ জেনারেশন, অনন্যতা নিশ্চিতকরণ এবং ডুপ্লিকেট হ্রাস পরিসংখ্যান
  • শক্তি এবং এনট্রপি মেট্রিক
  • নীতি পরীক্ষক এবং পাসফ্রেজ জেনারেটর
  • বহুভাষিক কোড উদাহরণ (JS、Python、PHP、Go、Java、C#、Rust)
  • একক ক্লিকে কপি (একটি/সবকিছু)

পাসওয়ার্ড জেনারেশন উদাহরণ

শক্তিশালী (Strong)
দৈর্ঘ্য 24, বড়/ছোট হাতের অক্ষর/অঙ্ক/প্রতীক সহ
সহজে মনে রাখা যায় (Memorable)
দৈর্ঘ্য 16, বড়/ছোট হাতের অক্ষর/অঙ্ক সহ, সদৃশ অক্ষর এড়িয়ে চলুন

পাসওয়ার্ড জ্ঞানভাণ্ডার

1) পাসওয়ার্ড শক্তি এবং এনট্রপি
  • এনট্রপি ≈ log2(ক্যারেক্টার পুল আকার) × দৈর্ঘ্য; দৈর্ঘ্যের অবদান সাধারণত বেশি
  • সুপারিশকৃত লক্ষ্য: সাধারণ অ্যাকাউন্ট ≥ 80 বিট; উচ্চ অধিকার/ফাইন্যান্সিয়াল ≥ 110 বিট
  • বড় ক্যারেক্টার পুল + দীর্ঘ দৈর্ঘ্য → অনুমান প্রতিরোধে বেশি কার্যকর
2) দৈর্ঘ্য vs জটিলতা
  • অপ্রয়োজনীয়ভাবে সিম্বল যোগ করা দৈর্ঘ্য বাড়ানোর চেয়ে কম কার্যকর
  • নির্দিষ্ট ভবিষ্যদ্বাণীযোগ্য প্যাটার্ন এড়ান (যেমন সবসময় ‘প্রথম অক্ষর বড়, শেষে সংখ্যা!’)
  • পর্যাপ্ত দৈর্ঘ্য নিশ্চিত করুন, তারপর ধাপে ধাপে ক্যারেক্টার বৈচিত্র্য বাড়ান
3) সাধারণ ভুল এবং বিপরীত প্যাটার্ন
  • কীবোর্ড সিকোয়েন্স (qwerty), পুনরাবৃত্তি ব্লক, জন্মতারিখ/বছর ইত্যাদি সহজেই নিয়ম দ্বারা অনুমান করা যায়
  • ‘মূল পাসওয়ার্ড + ওয়েবসাইট সুফিক্স’ হল ভেরিয়েন্ট রিপিটেশন, যা ঝুঁকি কেন্দ্রীভূত এবং অনুমান করা সহজ
  • একাধিক ওয়েবসাইটে একই পাসওয়ার্ড ব্যবহার করবেন না
4) পাসওয়ার্ড পরিচালনার সুপারিশ
  • পাসওয়ার্ড ম্যানেজার ব্যবহার করুন; প্রতিটি সাইটের জন্য অনন্য; গুরুত্বপূর্ণ অ্যাকাউন্টে MFA সক্রিয় করুন
  • সাধারণ চ্যানেলে পাসওয়ার্ড পাঠাবেন না; প্রয়োজনে 'উচ্চারণযোগ্য' পাসফ্রেজ ব্যবহার করুন
  • লিক বা পুনরাবৃত্তি শনাক্ত করলে তাৎক্ষণিকভাবে পরিবর্তন করুন এবং অনন্য করুন
5) পাসফ্রেজ (Passphrase) গাইডলাইন
  • 4–6 শব্দের সংমিশ্রণ সাধারণত শক্তিশালী এবং মনে রাখা সহজ
  • বিভিন্ন সেপারেটর, বড় অক্ষর, সংখ্যা যোগ করে শক্তি এবং পঠনযোগ্যতা বাড়ান
  • সাধারণ ফ্রেজ/গানের কথা/উক্তির সরাসরি সংমিশ্রণ এড়ান

পাসওয়ার্ড নিরাপত্তা অনুশীলন গাইড

সর্বোত্তম অনুশীলন
  • যতটা সম্ভব পর্যাপ্ত দৈর্ঘ্য ব্যবহার করুন: সাধারণ অ্যাকাউন্টের জন্য 16+, গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য 24+
  • মনে রাখার প্রয়োজনীয়তা থাকলে প্রাথমিকভাবে পাসফ্রেজ ব্যবহার করুন; র‍্যান্ডম হাই-স্ট্রেন্থ পাসওয়ার্ডগুলি পাসওয়ার্ড ম্যানেজারের মাধ্যমে সংরক্ষণ করুন
  • যতটা সম্ভব একাধিক ফ্যাক্টর প্রমাণীকরণ (MFA) চালু করুন
  • একই পাসওয়ার্ড বিভিন্ন ওয়েবসাইটে পুনরায় ব্যবহার করবেন না; প্রতিটি অ্যাকাউন্টের জন্য একটি অনন্য পাসওয়ার্ড ব্যবহার করুন
এনট্রপি এবং শক্তি

এনট্রপি দৈর্ঘ্য এবং অক্ষর সেটের আকারের ভিত্তিতে অপ্রত্যাশিততা প্রতিফলিত করে; বেশি বিটের এনট্রপি সাধারণত বেশি শক্তিশালী হয়।

  • সর্বাধিক সুবিধা পাওয়ার জন্য দৈর্ঘ্য বাড়ান
  • সম্ভব হলে বিভিন্ন অক্ষর সেট ব্যবহার করুন
  • অতিরিক্ত অক্ষর বাদ দেওয়া অক্ষর সেটকে সংকুচিত করে শক্তি কমিয়ে দেয়
নীতি এবং পরিবর্তন
  • জটিল গঠন নিয়মের চেয়ে দৈর্ঘ্য এবং সাধারণ/প্রকাশিত পাসওয়ার্ডের ব্ল্যাকলিস্ট ব্যবহার করুন
  • প্রতিনিয়ত পাসওয়ার্ড পরিবর্তনের প্রয়োজন নেই; শুধুমাত্র প্রকাশ বা ঝুঁকির সময় পরিবর্তন করুন
  • প্রকাশিত পাসওয়ার্ড তালিকা ব্যবহার করে সাধারণ/প্রকাশিত পাসওয়ার্ড প্রতিরোধ করুন
পাসফ্রেজ
  • 4–6টি র‍্যান্ডম শব্দ ব্যবহার করুন এবং তাদের পৃথককারী দিয়ে যুক্ত করুন, যেমন lake-CARROT-planet_7
  • পরিচিত উক্তি/গানের কথা ইত্যাদি ব্যবহার করবেন না; র‍্যান্ডমনেস এর চেয়ে ‘বুদ্ধিমত্তা’ বেশি গুরুত্বপূর্ণ
  • গুরুত্বপূর্ণ অ্যাকাউন্টের জন্য পাসওয়ার্ড ম্যানেজারের মাধ্যমে প্রকৃত উচ্চ-এনট্রপি র‍্যান্ডম পাসওয়ার্ড সংরক্ষণ করুন
জেনারেট সেটিংস টিপস
  • "Require each selected set" প্রতিটি সেটের কমপক্ষে একটি অক্ষর অন্তর্ভুক্ত করে
  • "Avoid similar" পড়ার সুবিধা বাড়ায়, তবে অক্ষর সেটের আকার কিছুটা কমিয়ে দেয়
  • প্রতীকগুলি সিস্টেমের সমর্থিত সাবসেটে সীমাবদ্ধ করা যেতে পারে
সার্ভার-সides সংরক্ষণ
  • পাসওয়ার্ড পরিষ্কার অবস্থায় সংরক্ষণ করবেন না; শক্তিশালী হ্যাশ (Argon2id/PBKDF2/BCrypt) এবং সল্ট ব্যবহার করুন
  • উপযুক্ত প্যারামিটার (মেমোরি/সময়/খরচ) সেট করুন; প্রয়োজনে pepper ব্যবহার করুন
  • দ্রুততা সীমাবদ্ধ করুন এবং ব্যর্থ প্রচেষ্টা মনিটর করুন; আক্রমণের সময় CAPTCHA বা ডিভাইস যাচাইকরণ যোগ করুন
একাধিক ফ্যাক্টর এবং পুনরুদ্ধার
  • TOTP/হার্ডওয়্যার কী ব্যবহার করুন; SMS এড়িয়ে চলুন
  • পুনরুদ্ধার প্রক্রিয়া সুরক্ষিত রাখুন: একাধিক ফ্যাক্টর বা ইমেইল যাচাইকরণ এবং কুলিং পিরিয়ড সেট করুন
  • ব্যাকআপ রিকভারি কোড প্রদান করুন এবং ব্যবহারকারীদের সঠিকভাবে সংরক্ষণের পরামর্শ দিন
ব্রুট ফোর্স প্রতিরোধ
  • প্রগতিশীল বিলম্ব/লক এবং IP/ডিভাইস ঝুঁকি স্কোরিং ব্যবহার করুন
  • API এবং লগইন ফর্মে WAF/লিমিটিং কনফিগার করুন
  • কী-স্ট্রোক আক্রমণ মনিটর করুন এবং ব্যবহারকারীদের অনন্য পাসওয়ার্ড ব্যবহারের পরামর্শ দিন
স্থানীয় সংরক্ষণ এবং প্রক্রিয়াকরণ
  • সংরক্ষণ এবং অটো-পূরণের জন্য নির্ভরযোগ্য পাসওয়ার্ড ম্যানেজার ব্যবহার করুন
  • পাসওয়ার্ড চ্যাট/ইমেইলের মাধ্যমে পরিষ্কার অবস্থায় শেয়ার করবেন না; টিমের জন্য সিক্রেট ম্যানেজমেন্ট টুল ব্যবহার করুন
  • যদি অফলাইন রেকর্ডিং প্রয়োজন হয়, তবে ভৌত সুরক্ষা নিশ্চিত করুন
ঘোষণা: এই টুলটি ব্রাউজারে স্থানীয়ভাবে Web Crypto ব্যবহার করে পাসওয়ার্ড তৈরি করে; কোনো ডেটা সার্ভারে পাঠানো হয় না।

প্রোগ্রামিং ভাষায় পাসওয়ার্ড জেনারেট করার উপায়

JavaScript(Web Crypto)
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');
  const bytes = new Uint32Array(length);
  crypto.getRandomValues(bytes);
  let out = '';
  for (let i = 0; i < length; i++) out += pool[bytes[i] % pool.length];
  return out;
}
Python(secrets)
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))
PHP(random_int)
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;
}
Go(crypto/rand)
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
}
Java(SecureRandom)
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();
  }
}
C#(.NET RandomNumberGenerator)
using System;
using System.Security.Cryptography;

public static class Pw {
  public static string RandomPassword(int length, string pool) {
    using var rng = RandomNumberGenerator.Create();
    var bytes = new byte[length];
    rng.GetBytes(bytes);
    var chars = new char[length];
    for (int i = 0; i < length; i++) {
      chars[i] = pool[bytes[i] % pool.Length];
    }
    return new string(chars);
  }
}
Rust(rand + getrandom)
use rand::rngs::OsRng;
use rand::RngCore;

fn random_password(length: usize, pool: &str) -> String {
    let mut bytes = vec![0u8; length];
    OsRng.fill_bytes(&mut bytes);
    let chars: Vec = pool.chars().collect();
    bytes
        .iter()
        .map(|b| chars[(*b as usize) % chars.len()])
        .collect()
}

fn main() {
    let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
    let pw = random_password(16, pool);
    println!("{}", pw);
}