पासवर्ड जेनरेटर और वैलिडेटर टूल
प्रोफेशनल पासवर्ड जेनरेटर और वैलिडेटर टूल जो मजबूत पासवर्ड और याद रखने योग्य पासफ्रेज बनाता है, जिसमें बैच जेनरेशन, यूनिकनेस गारंटी, स्ट्रेंथ असेसमेंट और पॉलिसी वैलिडेशन का समर्थन होता है। इसमें क्रिप्टोग्राफिक रूप से सुरक्षित रैंडम स्रोत, कॉन्फ़िगर करने योग्य कैरेक्टर सेट, समान कैरेक्टर फ़िल्टरिंग, बैच डुप्लिकेशन स्टैटिस्टिक्स और एक-क्लिक कॉपी फ़ंक्शन शामिल है। इसमें बहुभाषी कोड उदाहरण, पासवर्ड नॉलेज बेस, सुरक्षा सर्वोत्तम प्रैक्टिस और पॉलिसी टेस्टिंग टूल शामिल हैं। सभी ऑपरेशन आपके ब्राउज़र में स्थानीय रूप से किए जाते हैं, जिससे गोपनीयता और सुरक्षा सुनिश्चित होती है।
पासवर्ड पॉलिसी टेस्टर
- लंबाई
- छोटा अक्षर
- बड़ा अक्षर
- अंक
- प्रतीक
- अनुक्रमिक
- पुनरावृत्तियां
- प्रतिबंध सूची
पासफ्रेज जनरेटर
पासवर्ड हैशिंग शीट
- उचित मेमोरी-हार्ड पैरामीटर के साथ Argon2id का उपयोग करें
- समय ≥ 2 पास, मेमोरी ≥ 64MB (पर्यावरण के अनुसार समायोजित करें)
- प्रति उपयोगकर्ता एक अद्वितीय नमक स्टोर करें; वैकल्पिक रूप से ऐप्लिकेशन स्तर पर पेपर का उपयोग करें
- SHA-256 या SHA-512 चुनें जिसमें पुनरावृत्तियाँ ≥ 210k हों (आवश्यकतानुसार समायोजित करें)
- प्रत्येक हैश के लिए एक अद्वितीय नमक का उपयोग करें; पैरामीटर अपग्रेड का समर्थन करें
- उपयोगकर्ता के अगले लॉगिन के दौरान उच्च लागत वाले पैरामीटर में माइग्रेट करें
- लागत को 10–14 के बीच सेट करें, सर्वर क्षमताओं के अनुसार
- कटौती की समस्याओं से बचें; पूर्ण पासवर्ड को हैश करें
- प्रमाणीकरण एंडपॉइंट्स पर रेट लिमिटिंग और निगरानी लागू करें
पासवर्ड स्ट्रेंथ मूल्यांकक
स्ट्रेंथ को एंट्रॉपी से अनुमानित किया जाता है: एंट्रॉपी = लॉग2(कैरेक्टर पूल आकार) × लंबाई। बड़ा कैरेक्टर पूल और लंबी लंबाई अनुमान लगाने के प्रति प्रतिरोधकता को बेहतर बनाते हैं।
- कमजोर: < 50 बिट —— केवल एकबार उपयोग या कम मूल्य वाले परिदृश्यों के लिए उपयुक्त
- मध्यम: 50–80 बिट —— कम जोखिम वाले परिदृश्यों के लिए स्वीकार्य
- मजबूत: 80–110 बिट —— अनुशंसित डिफ़ॉल्ट लक्ष्य
- उत्कृष्ट: > 110 बिट —— व्यवस्थापक या महत्वपूर्ण खातों के लिए अनुशंसित
नोट: वास्तविक दुनिया के हमले के मॉडल भिन्न हो सकते हैं; पासवर्ड का पुन: उपयोग न करें और बहु-कारक प्रमाणीकरण (MFA) सक्षम करें।
उपयोग कैसे करें
- लंबाई और कैरेक्टर सेट चुनें (निचला/ऊपरी/अंक/प्रतीक); वैकल्पिक रूप से 'समान से बचें' और 'प्रत्येक की आवश्यकता' को सक्षम करें
- अधिक सटीक नियंत्रण के लिए: विशिष्ट कैरेक्टर या कैरेक्टर समूहों को बाहर करें, या प्रतीक सबसेट चुनें
- कितने पासवर्ड जेनरेट करने हैं, वह चुनें, फिर जेनरेट पर क्लिक करें; बैच परिणाम स्वचालित रूप से डुप्लिकेट हटा देते हैं और सभी को एक बार में कॉपी किया जा सकता है
- मौजूदा पासवर्ड को वैलिडेट करने के लिए, पॉलिसी टेस्टर का उपयोग करें; याद रखने योग्य पासफ्रेज के लिए, पासफ्रेज जेनरेटर का उपयोग करें
फीचर्स
- क्रिप्टोग्राफिक रूप से सुरक्षित रैंडम स्रोत (Web Crypto)
- कॉन्फ़िगर करने योग्य कैरेक्टर सेट और प्रतीक समूह
- समान कैरेक्टर फ़िल्टरिंग और कस्टम बहिष्कार
- 1-100 पासवर्ड की बैच जेनरेशन, हमेशा यूनिक
- स्ट्रेंथ और एन्ट्रॉपी मेट्रिक्स
- पॉलिसी टेस्टर और पासफ्रेज जेनरेटर
- बहुभाषी कोड उदाहरण
- एक-क्लिक कॉपी (एकल या सभी)
पासवर्ड नॉलेज बेस
- एन्ट्रॉपी ≈ 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);
}