ToolDeck

تولیدکننده رمز عبور

ایجاد رمز عبور تصادفی قوی با طول و مجموعه کاراکترهای قابل تنظیم

طول20
تعداد5

تولیدکننده رمز عبور چیست؟

یک تولیدکننده رمز عبور، رشته‌های تصادفی از کاراکترها را برای استفاده به‌عنوان رمز عبور حساب‌های کاربری، کلیدهای API، اعتبارنامه‌های پایگاه داده و کلیدهای رمزنگاری می‌سازد. برخلاف رمزهای عبور انتخابی انسان، رمزهای تولیدشده از کل فضای ترکیب‌های ممکن کاراکتر بهره می‌برند و در برابر حملات دیکشنری و حدس‌زنی مبتنی بر الگو مقاوم هستند. این ابزار رمزهای عبور تصادفی قوی را با استفاده از مولد اعداد تصادفی رمزنگاری‌شده داخلی مرورگر شما به‌صورت آنلاین تولید می‌کند.

قدرت رمز عبور به دو عامل بستگی دارد: طول و تنوع کاراکتر. یک رمز عبور ۲۰ کاراکتری با حروف بزرگ، کوچک، ارقام و نمادها دارای حدود ۱۳۱ بیت آنتروپی است. در این سطح، یک حمله brute-force که یک تریلیون حدس در ثانیه آزمایش می‌کند، بیش از عمر کیهان طول می‌کشد تا تمام ترکیب‌ها را امتحان کند. محاسبه ساده است: آنتروپی = طول × log2(اندازه مجموعه کاراکتر).

استانداردهایی مانند NIST SP 800-63B رمزهای عبور حداقل ۸ کاراکتری را توصیه می‌کنند، بدون اینکه سقف بالایی توسط تأییدکننده اعمال شود، و توصیه می‌کنند که از قوانین ترکیب اجباری مانند الزام دقیقاً یک نماد اجتناب شود و به‌جای آن عبارات عبور طولانی‌تر را ترجیح می‌دهند. برای اعتبارنامه‌های ماشین به ماشین و حساب‌های سرویس، ۲۰ یا بیشتر کاراکتر تصادفی از یک مجموعه کاراکتر کامل، خط پایه پذیرفته‌شده در اکثر چارچوب‌های امنیتی و رژیم‌های انطباق است.

چرا از تولیدکننده رمز عبور استفاده کنیم؟

انسان‌ها در انتخاب تصادفی ضعیف هستند. رمزهای عبور را تکرار می‌کنیم، کلمات دیکشنری انتخاب می‌کنیم، حروف را با الگوهای قابل پیش‌بینی جایگزین می‌کنیم (@ به‌جای a، 3 به‌جای e) و به رشته‌های کوتاه تکیه می‌کنیم. یک تولیدکننده رمز عبور این سوگیری را از فرایند حذف می‌کند.

🔐
تولید با اولویت حریم خصوصی
رمزهای عبور کاملاً در مرورگر شما با استفاده از Web Crypto API تولید می‌شوند. هیچ داده‌ای از دستگاه شما خارج نمی‌شود، هیچ چیزی ثبت نمی‌شود و هیچ درخواست شبکه‌ای در حین تولید ارسال نمی‌شود.
خروجی دسته‌ای فوری
با یک کلیک تا ۲۰ رمز عبور به‌یکباره تولید کنید. رمزهای عبور را به‌صورت جداگانه یا همه آن‌ها را یکجا برای اسکریپت‌های راه‌اندازی یا مخازن اعتبارنامه کپی کنید.
🛡️
بدون نیاز به حساب کاربری
بدون ثبت‌نام، بدون ایمیل، بدون کوکی‌هایی که رمزهای تولیدشده شما را ردیابی کنند. صفحه را باز کنید، گزینه‌هایتان را تنظیم کنید و تولید نمایید.
🎛️
کنترل کامل مجموعه کاراکتر
حروف بزرگ، کوچک، ارقام و نمادها را به‌صورت مستقل فعال یا غیرفعال کنید. طول را از ۴ تا ۱۲۸ کاراکتر تنظیم کنید تا با الزامات هر سیستم یا سیاستی مطابقت داشته باشد.

موارد استفاده از تولیدکننده رمز عبور

توسعه Frontend
رمزهای عبور آزمایشی برای اعتبارسنجی فرم، آزمایش طول ورودی و توسعه جریان احراز هویت تولید کنید. تأیید کنید که فرم‌های ورود شما رمزهای عبور ۱۲۸ کاراکتری و کاراکترهای خاص را به‌درستی مدیریت می‌کنند.
Backend و DevOps
اعتبارنامه‌های پایگاه داده، توکن‌های API و رمزهای عبور حساب سرویس را در طول راه‌اندازی زیرساخت بسازید. از تولید دسته‌ای برای راه‌اندازی چندین سرویس در یک جلسه استفاده کنید.
مهندسی امنیت
کلیدهای مخفی با آنتروپی بالا برای کلیدهای رمزنگاری، امضای HMAC و چرخش کلید مخفی JWT تولید کنید. طول را روی ۶۴ کاراکتر یا بیشتر تنظیم کنید برای کلیدهای مخفی که باید از ۲۵۶ بیت آنتروپی فراتر روند.
QA و تست نفوذ
اجرای سیاست رمز عبور را با تولید رشته‌هایی که مجموعه‌های کاراکتر خاص را شامل می‌شوند یا از آن‌ها حذف می‌شوند آزمایش کنید. تأیید کنید که سیستم‌ها به‌درستی رمزهای عبور زیر حداقل طول یا پیچیدگی را رد می‌کنند.
مهندسی داده
اعتبارنامه‌های تصادفی برای محیط‌های آزمایشی، پایگاه‌های داده staging و کلیدهای مخفی pipeline CI/CD تولید کنید. از استفاده مجدد از رمزهای عبور تولیدی در داده‌های آزمایشی با تولید رمزهای تازه برای هر محیط پرهیز کنید.
امنیت حساب شخصی
برای هر حساب آنلاین رمز عبور منحصربه‌فرد بسازید. این تولیدکننده را با یک مدیر رمز عبور ترکیب کنید تا اعتبارنامه‌هایی را که نیازی به حفظ کردن ندارید ذخیره کنید.

جدول مرجع آنتروپی رمز عبور

آنتروپی اندازه‌گیری می‌کند که یک رمز عبور چقدر غیرقابل پیش‌بینی است. به‌صورت log2(charset_size ^ length) محاسبه می‌شود. آنتروپی بالاتر به معنای ترکیب‌های بیشتری است که مهاجم باید در آن‌ها جستجو کند. NIST و OWASP حداقل ۸۰ بیت آنتروپی را برای برنامه‌های امنیتی بالا توصیه می‌کنند.

طولمجموعه کاراکترآنتروپیزمان brute-force
8lower + digits~41 bitsMinutes to hours
12lower + upper + digits~71 bitsCenturies (offline)
16all character sets~105 bitsBeyond brute-force
20all character sets~131 bitsBeyond brute-force
32all character sets~210 bitsBeyond brute-force
64all character sets~419 bitsBeyond brute-force

این زمان‌ها با فرض یک تریلیون حدس در ثانیه محاسبه شده‌اند (حمله آفلاین با GPUهای مدرن). حملات آنلاین با محدودیت نرخ چندین برابر کندتر هستند.

CSPRNG در مقابل Math.random() برای تولید رمز عبور

منبع تصادفی‌سازی به اندازه طول رمز عبور اهمیت دارد. رمز عبوری که با یک مولد اعداد تصادفی قابل پیش‌بینی تولید شده، می‌تواند توسط مهاجمی که الگوریتم و وضعیت اولیه را می‌داند بازسازی شود. این ابزار از crypto.getRandomValues() استفاده می‌کند که یک مولد اعداد شبه‌تصادفی رمزنگاری‌شده امن (CSPRNG) است که در هر مرورگر مدرن داخلی است.

crypto.getRandomValues()
از منابع آنتروپی سیستم‌عامل (RNG سخت‌افزاری، زمان‌بندی وقفه و غیره) استفاده می‌کند. خروجی حتی اگر مهاجم تمام خروجی‌های قبلی را بداند، غیرقابل پیش‌بینی است. طبق مشخصات W3C Web Crypto برای عملیات حساس امنیتی الزامی است.
Math.random()
از یک الگوریتم قطعی با مقدار اولیه از یک مخزن آنتروپی محدود استفاده می‌کند. خروجی را می‌توان پیش‌بینی کرد اگر وضعیت اولیه (seed) مشخص باشد. مشخصات ECMAScript صراحتاً بیان می‌کند که Math.random() اعداد تصادفی رمزنگاری‌شده امن فراهم نمی‌کند. هرگز از آن برای تولید رمز عبور استفاده نکنید.

نمونه کدها

رمزهای عبور را به‌صورت برنامه‌ای در زبان‌های مختلف تولید کنید. هر مثال زیر از یک منبع تصادفی رمزنگاری‌شده امن استفاده می‌کند، نه Math.random() یا PRNGهای ضعیف معادل.

JavaScript (Web Crypto API)
// Generate a random password in the browser or Node.js 19+
function generatePassword(length = 20) {
  const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*'
  const values = new Uint32Array(length)
  crypto.getRandomValues(values)
  return Array.from(values, v => charset[v % charset.length]).join('')
}

console.log(generatePassword())    // → "kR7!mZp$Xw2&nLq9@Yf3"
console.log(generatePassword(32))  // → "Hd4%tNx!Qw8#mKp2Rv6&Zj0*Ls3Yb7@"
Python
import secrets
import string

def generate_password(length: int = 20) -> str:
    """Generate a cryptographically secure random password."""
    alphabet = string.ascii_letters + string.digits + string.punctuation
    return ''.join(secrets.choice(alphabet) for _ in range(length))

# Single password
print(generate_password())      # → "kR7!mZp$Xw2&nLq9@Yf3"

# Batch of 5 passwords
for _ in range(5):
    print(generate_password(24))

# Ensure at least one char from each category
def generate_strong(length: int = 20) -> str:
    required = [
        secrets.choice(string.ascii_uppercase),
        secrets.choice(string.ascii_lowercase),
        secrets.choice(string.digits),
        secrets.choice(string.punctuation),
    ]
    remaining = length - len(required)
    alphabet = string.ascii_letters + string.digits + string.punctuation
    all_chars = required + [secrets.choice(alphabet) for _ in range(remaining)]
    secrets.SystemRandom().shuffle(all_chars)
    return ''.join(all_chars)
CLI (OpenSSL / /dev/urandom)
# OpenSSL — generate 32 random bytes, base64-encode
openssl rand -base64 32
# → "x7Kp2mNqR4wZ8vLs1Yb0Hd6tFj3Xc9Ga5eUi+Wo="

# /dev/urandom with tr — alphanumeric + symbols, 20 chars
tr -dc 'A-Za-z0-9!@#$%^&*' < /dev/urandom | head -c 20; echo
# → "kR7!mZp$Xw2&nLq9@Yf3"

# pwgen (install: apt install pwgen / brew install pwgen)
pwgen -sy 20 5
# Generates 5 passwords, 20 chars each, with symbols
Go
package main

import (
    "crypto/rand"
    "fmt"
    "math/big"
)

func generatePassword(length int) (string, error) {
    charset := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"
    result := make([]byte, length)
    for i := range result {
        idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
        if err != nil {
            return "", err
        }
        result[i] = charset[idx.Int64()]
    }
    return string(result), nil
}

func main() {
    pwd, _ := generatePassword(20)
    fmt.Println(pwd) // → "kR7!mZp$Xw2&nLq9@Yf3"
}

سوالات متداول

طول رمز عبور باید چقدر باشد؟
برای حساب‌های کاربری، ۱۶ کاراکتر از یک مجموعه کاراکتر ترکیبی بیش از ۱۰۰ بیت آنتروپی فراهم می‌کند که برای تمام مدل‌های تهدید فعلی کافی است. برای کلیدهای مخفی ماشین (کلیدهای API، کلیدهای رمزنگاری)، از ۳۲ کاراکتر یا بیشتر استفاده کنید. NIST SP 800-63B حداقل ۸ کاراکتر تعیین می‌کند اما توصیه می‌کند سیستم‌ها رمزهای عبور بسیار طولانی‌تر را بدون کوتاه‌سازی مجاز بدانند.
آیا این تولیدکننده رمز عبور برای استفاده امن است؟
بله. رمزهای عبور در مرورگر شما با استفاده از Web Crypto API (crypto.getRandomValues) تولید می‌شوند. هیچ داده‌ای به هیچ سروری ارسال نمی‌شود. می‌توانید این را با باز کردن تب شبکه مرورگر و مشاهده اینکه هیچ درخواستی هنگام کلیک روی تولید ارسال نمی‌شود تأیید کنید. کد منبع JavaScript سمت کاربر است و در ابزار توسعه‌دهنده مرورگر شما قابل مشاهده است.
آنتروپی رمز عبور چیست؟
آنتروپی معیاری از تصادفی بودن است که بر حسب بیت بیان می‌شود. یک رمز عبور با N بیت آنتروپی دارای 2^N مقدار ممکن است. برای مثال، یک رمز عبور ۲۰ کاراکتری از ۹۵ کاراکتر قابل چاپ ASCII دارای log2(95^20) = 131.1 بیت آنتروپی است. هر بیت اضافی تعداد حدس‌هایی که مهاجم نیاز دارد را دو برابر می‌کند.
آیا باید نمادها را در رمزهای عبورم بگنجانم؟
گنجاندن نمادها، مجموعه کاراکتر را از ۶۲ (حروف + ارقام) به ۹۵ (ASCII قابل چاپ) افزایش می‌دهد که حدود ۶.۱ بیت آنتروپی به ازای هر کاراکتر اضافه می‌کند. برخی سیستم‌ها محدودیت دارند که کدام نمادها مجاز هستند. اگر سیستمی نمادهای خاصی را رد کرد، گزینه نمادها را غیرفعال کنید و با رمز عبور طولانی‌تر جبران کنید. یک رمز عبور الفبایی ۲۴ کاراکتری آنتروپی بیشتری نسبت به رمز عبور ۱۶ کاراکتری با نماد دارد.
چرا از Math.random() برای تولید رمز عبور استفاده نکنیم؟
Math.random() از نظر رمزنگاری امن نیست. اکثر موتورهای JavaScript آن را با xorshift128+ یا یک PRNG سریع مشابه پیاده‌سازی می‌کنند که برای شبیه‌سازی و بازی طراحی شده، نه امنیت. مهاجمی که چند خروجی را مشاهده کند می‌تواند وضعیت داخلی را بازیابی کرده و تمام خروجی‌های آینده را پیش‌بینی کند. Web Crypto API از منابع آنتروپی سیستم‌عامل استفاده می‌کند که قابل پیش‌بینی نیستند.
آیا می‌توانم رمزهای تولیدشده را برای کلیدهای API و توکن‌ها استفاده کنم؟
بله، اما الزامات فرمت سیستم هدف را در نظر بگیرید. برخی API ها کلیدهای base64-encoded یا رشته‌های hex را به‌جای کاراکترهای دلخواه انتظار دارند. برای تولید کلید مخفی خام، از مجموعه کاراکتر کامل در ۳۲+ کاراکتر استفاده کنید. برای کلیدهای base64، بایت‌های تصادفی تولید کرده و آن‌ها را جداگانه رمزگذاری کنید به‌جای اینکه base64 را به‌عنوان مجموعه کاراکتر رمز عبور در نظر بگیرید.
هر چند وقت باید رمزهای عبور را تغییر دهم؟
NIST SP 800-63B (2017، به‌روزرسانی 2024) توصیه می‌کند که از چرخش دوره‌ای اجباری رمزهای عبور کاربری اجتناب شود زیرا منجر به انتخاب رمزهای عبور ضعیف‌تر می‌شود. تنها زمانی که شواهدی از دسترسی غیرمجاز وجود دارد تغییر دهید. برای کلیدهای مخفی ماشین و حساب‌های سرویس، بر اساس مدل ریسک سازمان خود تغییر دهید، معمولاً هر ۹۰ روز برای اعتبارنامه‌های با امتیاز بالا.