پاس ورڈ جنریٹر اور توثیق کار ٹول
پروفیشنل پاس ورڈ جنریٹر اور توثیق کار ٹول جو مضبوط پاس ورڈز اور یاد رکھنے کے قابل پاس فریز بناتا ہے، جس میں بیچ جنریشن، منفردیت کی ضمانت، طاقت کا اندازہ اور پالیسی کی توثیق شامل ہے۔ خصوصیات میں خفیہ نگاری کے لحاظ سے محفوظ رینڈم سورس، کنفیگریبل کریکٹر سیٹ، ملتے جلتے کریکٹرز کی فلٹرنگ، بیچ سے ڈپلیکیٹس ہٹانے کے اعداد و شمار اور ایک کلک سے کاپی کرنے کا فنکشن شامل ہے۔ اس میں کثیر لسانی کوڈ کی مثالیں، پاس ورڈ کا علمی بنیاد، سیکیورٹی کے بہترین طریقے اور پالیسی جانچ کے ٹولز شامل ہیں۔ تمام کام آپ کے براؤزر میں مقامی سطح پر ہوتے ہیں، جس سے رازداری اور سیکیورٹی یقینی بنتی ہے۔
پاس ورڈ پالیسی ٹیسٹر
- لمبائی
- چھوٹے حروف
- بڑے حروف
- اعداد
- علامات
- ترتیب وار
- تکرار
- بلاک لسٹ
پاس فریز جنریٹر
پاس ورڈ ہیشنگ چیٹ شیٹ
- معقول میموری-ہارڈ پیرامیٹرز کے ساتھ Argon2id استعمال کریں
- وقت ≥ 2 پاسز، میموری ≥ 64MB (ماحول کے مطابق ایڈجسٹ کریں)
- ہر صارف کے لیے منفرد نمک (salt) محفوظ کریں؛ اختیاری طور پر ایپلی کیشن پرت پر مرچ (pepper) استعمال کریں
- SHA-256 یا SHA-512 کو ≥ 210k تکراروں کے ساتھ منتخب کریں (ضرورت کے مطابق ایڈجسٹ کریں)
- ہر ہیش کے لیے منفرد نمک (salt) استعمال کریں؛ پیرامیٹر اپ گریڈ کی حمایت کریں
- صارف کی اگلی لاگ ان کے دوران اعلیٰ لاگت والے پیرامیٹرز پر منتقل ہوں
- سرور کی صلاحیتوں کے مطابق لاگت 10–14 کے درمیان سیٹ کریں
- کٹاو کے مسائل سے پرہیز کریں؛ مکمل پاس ورڈ کو ہیش کریں
- تصدیق کے اختتامی نکات پر ریٹ محدودی اور نگرانی نافذ کریں
پاس ورڈ سٹرتھ ایویلیو ایٹر
سٹرتھ کا تخمینہ اینٹروپی کے ذریعہ لگایا جاتا ہے: اینٹروپی = لاگ2 (کریکٹر پول کا سائز) × لمبائی۔ بڑا کریکٹر پول اور لمبی لمبائی اندازہ لگانے کے خلاف مزاحمت کو بہتر بناتی ہے۔
- کمزور: < 50 بٹس —— صرف ایک بار استعمال ہونے والے یا کم قیمت والے منظرناموں کے لیے موزوں
- معقول: 50–80 بٹس —— کم خطرے والے منظرناموں کے لیے قابل قبول
- مضبوط: 80–110 بٹس —— تجویز کردہ ڈیفالٹ ہدف
- بہترین: > 110 بٹس —— ایڈمن یا اہم اکاؤنٹس کے لیے تجویز کردہ
نوٹ: حقیقی دنیا کے حملے کے ماڈل مختلف ہو سکتے ہیں؛ پاس ورڈ کو دوبارہ استعمال کرنے سے گریز کریں اور ملٹی فیکٹر توثیق (MFA) کو فعال کریں۔
کیسے استعمال کریں
- لمبائی اور کریکٹر سیٹ منتخب کریں (چھوٹے/بڑے حروف/اعداد/علامتیں); اختیاری طور پر 'ملتے جلتے سے بچیں' اور 'ہر ایک درکار' کو فعال کریں
- مزید درست کنٹرول کے لیے: مخصوص حروف یا کریکٹر گروپز کو خارج کریں، یا علامات کے ذیلی سیٹ منتخب کریں
- تعیین کریں کہ کتنے پاس ورڈ بنانے ہیں، پھر Generate پر کلک کریں؛ بیچ نتائج خود بخود ڈپلیکیٹ ہوتے ہیں اور سب ایک ساتھ کاپی کیے جا سکتے ہیں
- موجودہ پاس ورڈز کی توثیق کے لیے، پالیسی ٹیسٹر استعمال کریں؛ یاد رکھنے کے قابل پاس فریز کے لیے، پاس فریز جنریٹر استعمال کریں
خصوصیات
- خفیہ نگاری کے لحاظ سے محفوظ رینڈم سورس (Web Crypto)
- کنفیگریبل کریکٹر سیٹ اور علامتیں کے گروپ
- ملتے جلتے حروف کی فلٹرنگ اور حسب ضرورت اخراج
- 1-100 پاس ورڈز کی بیچ جنریشن، ہمیشہ منفرد
- طاقت اور اینٹروپی کے میٹرکس
- پالیسی ٹیسٹر اور پاس فریز جنریٹر
- کثیر لسانی کوڈ کی مثالیں
- ایک کلک سے کاپی (ایک یا سب)
پاس ورڈ کا علمی بنیاد
- اینٹروپی ≈ log2(کریکٹر سیٹ کا سائز) × لمبائی؛ لمبائی عام طور پر زیادہ حصہ ڈالتی ہے
- تجویز کردہ ہدف: عام اکاؤنٹس ≥ 80 بٹس؛ اعلی مراعات والے/مالیاتی اکاؤنٹس ≥ 110 بٹس
- بڑا کریکٹر سیٹ + لمبی لمبائی → اندازہ لگانے کے خلاف زیادہ مزاحمت
- علامات کو اندھا دھند شامل کرنا لمبائی بڑھانے سے کم موثر ہے
- قابل پیش بینی نمونوں سے بچیں (مثال کے طور پر، ہمیشہ 'پہلا حرف بڑا + آخر میں نمبر!')
- کافی لمبائی کو ترجیح دیں، پھر معتدل حد تک کریکٹر تنوع بڑھائیں
- کی بورڈ کی ترتیبیں (مثال کے طور پر، qwerty)، بار بار آنے والے بلاک، سالگرہ/سالز کو قوانین کے ذریعے آسانی سے نشانہ بنایا جاتا ہے
- 'روٹ پاس ورڈ + سائٹ کا لگاؤ' استعمال کرنے سے تغیرات کا دوبارہ استعمال ہوتا ہے، خطرہ مرتکز ہوتا ہے اور پاس ورڈز زیادہ آسانی سے اندازہ لگائے جاتے ہیں
- ایک ہی پاس ورڈ کو ایک سے زیادہ ویب سائٹس پر کبھی نہ استعمال کریں
- پاس ورڈ مینیجر استعمال کریں؛ ہر سائٹ کے لیے منفرد پاس ورڈ یقینی بنائیں؛ اہم اکاؤنٹس کے لیے MFA فعال کریں
- عوامی چینلز پر پاس ورڈز کو سادہ متن میں منتقل کرنے سے بچیں؛ ضرورت کے مطابق 'تلفظ کے قابل' پاس فریز استعمال کریں
- اگر لیک ہونے یا دوبارہ استعمال کا پتہ چلے تو فوراً پاس ورڈز تبدیل کریں اور انہیں منفرد بنائیں
- 4–6 بے ترتیب الفاظ کا مجموعہ عام طور پر مضبوط اور یاد رکھنے کے قابل ہوتا ہے
- جداسازی کے نشانات ملائیں، پہلے حروف کو بڑے لکھیں، اور طاقت اور پڑھنے کی قابلیت بڑھانے کے لیے نمبر شامل کریں
- عام جملوں، گانو کی دھنوں، یا مشہور اقتباسات کو براہ راست جوڑنے سے گریز کریں
پاس ورڈ سیکیورٹی کے بہترین طریقے
- کافی لمبائی استعمال کریں: عام اکاؤنٹس کے لیے 16+ حروف، اہم اکاؤنٹس کے لیے 24+ حروف
- یاد رکھنے میں آسانی کے لیے، پاس فریز کو ترجیح دیں؛ Random، اعلیٰ طاقت والے پاس ورڈز کو ذخیرہ کرنے کے لیے پاس ورڈ مینیجر استعمال کریں
- جہاں بھی ممکن ہو ملٹی فیکٹر تصدیق (MFA) کو فعال کریں
- کبھی بھی سائٹوں پر پاس ورڈز دوبارہ استعمال نہ کریں—ہر اکاؤنٹ کا منفرد پاس ورڈ ہونا چاہیے
انٹروپی لمبائی اور کریکٹر سیٹ کے سائز کی بنیاد پر غیر متوقع پن کی پیمائش کرتی ہے—انٹروپی بٹس جتنی زیادہ ہوں گے، پاس ورڈ عام طور پر اتنا ہی مضبوط ہوگا
- زیادہ سے زیادہ طاقت حاصل کرنے کے لیے لمبائی بڑھانے کو ترجیح دیں
- جہاں ممکن ہو ایک سے زیادہ کریکٹر سیٹ استعمال کریں
- بہت سارے کریکٹرز کو خارج کرنے سے کریکٹر پول کم ہوجاتا ہے اور طاقت کمزور ہوجاتی ہے
- پیچیدہ ساخت کے قواعد کے بجائے لمبائی کی ضروریات اور عام/لیک ہوئے پاس ورڈز کی سیاہ فہرست کو ترجیح دیں
- بار بار لازمی گردش سے گریز کریں؛ صرف اس وقت تبدیل کریں جب خلاف ورزی یا خطرے کا پتہ چلے
- عام طور پر استعمال ہونے والے یا لیک ہوئے پاس ورڈز کو روکنے کے لیے سمجھوتہ شدہ پاس ورڈز کی فہرست استعمال کریں
- 4–6 بے ترتیب الفاظ استعمال کریں جو جداسازی کے نشانات سے جڑے ہوں، مثلاً lake-CARROT-planet_7
- مشہور اقتباسات، گانو کی دھنوں، یا دیگر عام جملوں سے گریز کریں؛ 'چالاکی' سے زیادہ بے ترتی پن اہم ہے
- اہم اکاؤنٹس کے لیے، واقعی اعلیٰ انٹروپی والے بے ترتیب پاس ورڈز کو ذخیرہ کرنے کے لیے پاس ورڈ مینیجر استعمال کریں
- "ہر منتخب سیٹ کی ضرورت" اس بات کو یقینی بناتا ہے کہ منتخب کردہ ہر زمرے کا کم از کم ایک کریکٹر ظاہر ہو
- "Similar سے گریز" پڑھنے کی قابلیت کو بہتر بناتا ہے لیکن کریکٹر پول کے سائز کو تھوڑا کم کرتا ہے
- علامتیں ہدف سسٹم کے تعاون یافتہ ذیلی سیٹ تک محدود رکھی جاسکتی ہیں
- کبھی بھی پاس ورڈز کو سادہ متن میں ذخیرہ نہ کریں؛ نمک (salt) کے ساتھ مضبوط ہیشنگ (Argon2id/PBKDF2/Bcrypt) استعمال کریں
- پیرامیٹرز (memory/time/cost) کو مناسب طریقے سے ترتیب دیں؛ ضرورت پڑنے پر پیپر (pepper) استعمال کرنے پر غور کریں
- لاگ ان کی کوششوں کی شرح کو محدود کریں اور ناکامیوں کی نگرانی کریں؛ حملوں کے دوران CAPTCHAs یا ڈیوائس کی تصدیق کا اطلاق کریں
- TOTP یا ہارڈ ویئر کلیدوں کو ترجیح دیں؛ جہاں بھی ممکن ہو SMS سے گریز کریں
- ملٹی فیکٹر یا ای میل تصدیق کے ساتھ بازیابی کے عمل کو محفوظ بنائیں اور ٹھنڈا ہونے کی مدت کو نافذ کریں
- بیک اپ بازیابی کے کوڈ فراہم کریں اور صارفین کو انہیں محفوظ طریقے سے ذخیرہ کرنے کی ترغیب دیں
- IP/ڈیوائس کے خطرے کے اسکور کے ساتھ ترقی پذیر تاخیر یا تالا لاگو کریں
- APIs اور لاگ ان فارمز پر WAFs اور شرح کی حد کا اطلاق کریں
- کریڈنشل اسٹفنگ کی نگرانی کریں اور صارفین کو منفرد پاس ورڈز اپنانے کی ترغیب دیں
- ذخیرہ اور خودکار بھرنے کے لیے معتبر پاس ورڈ مینیجر استعمال کریں
- چیٹ یا ای میل کے ذریعے صادق (پلین ٹیکسٹ) میں پاس ورڈ کبھی شیئر نہ کریں؛ ٹیموں کے لیے خفیہ مینجمنٹ ٹولز استعمال کریں
- اگر پاس ورڈ آف لائن لکھ رہے ہیں تو جسمانی سیکیورٹی کو یقینی بنائیں
پروگرامنگ زبانوں کے ذریعے پاس ورڈ کیسے تیار کریں
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);
}