Parola Oluşturucu
Özelleştirilebilir uzunluk ve karakter kümeleri ile güçlü rastgele parolalar oluşturun
Parola Oluşturucu Nedir?
Parola oluşturucu, kullanıcı hesapları, API anahtarları, veritabanı kimlik bilgileri ve şifreleme sırları olarak kullanılmak üzere rastgele karakter dizileri oluşturur. İnsan tarafından seçilen parolardan farklı olarak, oluşturulan parolalar olası karakter kombinasyonlarının tüm uzayından çeker; bu da onları sözlük saldırılarına ve örüntü tabanlı tahminlere karşı dirençli kılar. Bu araç, tarayıcınızın yerleşik kriptografik rastgele sayı üreticisini kullanarak çevrimiçi olarak güçlü rastgele parolalar oluşturur.
Parola gücü iki faktöre bağlıdır: uzunluk ve karakter çeşitliliği. Büyük harf, küçük harf, rakam ve sembol kullanan 20 karakterli bir parola yaklaşık 131 bit entropi sağlar. Bu düzeyde, saniyede bir trilyon deneme yapan bir kaba kuvvet saldırısının her kombinasyonu denemesi evrenin yaşından daha uzun sürer. Matematik basittir: entropi = uzunluk x log2(karakter kümesi boyutu).
NIST SP 800-63B gibi standartlar, doğrulayıcı tarafından zorunlu tutulan üst sınır olmaksızın en az 8 karakterlik parolalar önerir ve kesinlikle bir sembol gerektirmek gibi zorunlu kompozisyon kurallarını caydırarak daha uzun parola öbeklerini tercih eder. Makineden makineye kimlik bilgileri ve hizmet hesapları için, çoğu güvenlik çerçevesinde ve uyumluluk rejiminde kabul gören temel, tam bir karakter kümesinden çekilen 20 veya daha fazla rastgele karakterdir.
Neden Parola Oluşturucu Kullanmalısınız?
İnsanlar yetersiz rastgele sayı üreticileridir. Parolaları yeniden kullanır, sözlük kelimeleri seçer, harfleri öngörülebilir kalıplarla değiştirir (a için @, e için 3) ve kısa dizilere başvururuz. Parola oluşturucu, süreçten insan önyargısını kaldırır.
Parola Oluşturucu Kullanım Senaryoları
Parola Entropisi Başvurusu
Entropi, bir parolanın ne kadar tahmin edilemez olduğunu ölçer. log2(karakter_kümesi_boyutu ^ uzunluk) olarak hesaplanır. Daha yüksek entropi, saldırganın arama yapabileceği daha fazla olası kombinasyon anlamına gelir. NIST ve OWASP, yüksek güvenlikli uygulamalar için en az 80 bit entropi önerir.
| Uzunluk | Karakter Kümesi | Entropi | Kaba Kuvvet Süresi |
|---|---|---|---|
| 8 | lower + digits | ~41 bits | Minutes to hours |
| 12 | lower + upper + digits | ~71 bits | Centuries (offline) |
| 16 | all character sets | ~105 bits | Beyond brute-force |
| 20 | all character sets | ~131 bits | Beyond brute-force |
| 32 | all character sets | ~210 bits | Beyond brute-force |
| 64 | all character sets | ~419 bits | Beyond brute-force |
Kırma süreleri saniyede 1 trilyon deneme varsayar (modern GPU'larla çevrimdışı saldırı). Hız sınırlamalı çevrimiçi saldırılar çok daha yavaştır.
Parola Oluşturmada CSPRNG ile Math.random()
Rastgelelik kaynağı, parola uzunluğu kadar önemlidir. Tahmin edilebilir bir rastgele sayı üreticisiyle oluşturulan bir parola, algoritmayı ve tohum durumunu bilen bir saldırgan tarafından yeniden oluşturulabilir. Bu araç, her modern tarayıcıya yerleşik bir kriptografik olarak güvenli sözde rastgele sayı üreticisi (CSPRNG) olan crypto.getRandomValues() kullanır.
Kod Örnekleri
Farklı dillerde programatik olarak parola oluşturun. Aşağıdaki tüm örnekler, Math.random() veya eşdeğer zayıf PRNG'ler yerine kriptografik olarak güvenli bir rastgele kaynak kullanır.
// 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@"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)# 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
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"
}