Generator haseł

Generuj silne, losowe hasła z dowolną długością i zestawami znaków

Długość20
Liczba5

Czym jest generator haseł?

Generator haseł tworzy losowe ciągi znaków używane jako hasła do kont użytkowników, kluczy API, danych uwierzytelniających do baz danych i sekretów szyfrowania. W przeciwieństwie do haseł wybieranych przez człowieka, generowane hasła czerpią z pełnej przestrzeni możliwych kombinacji znaków, co czyni je odpornymi na ataki słownikowe i zgadywanie oparte na wzorcach. Narzędzie generuje silne, losowe hasła online, korzystając z wbudowanego kryptograficznego generatora liczb losowych przeglądarki.

Siła hasła zależy od dwóch czynników: długości i różnorodności znaków. Hasło składające się z 20 znaków, zawierające wielkie i małe litery, cyfry oraz symbole, ma około 131 bitów entropii. Na tym poziomie atak brute-force testujący bilion zgadnięć na sekundę potrzebowałby więcej czasu niż wiek wszechświata, aby sprawdzić każdą kombinację. Matematyka jest prosta: entropia = długość × log2(rozmiar zestawu znaków).

Standardy takie jak NIST SP 800-63B zalecają hasła o długości co najmniej 8 znaków bez górnego limitu narzucanego przez weryfikatora i odradzają wymuszanie reguł kompozycji, takich jak wymaganie dokładnie jednego symbolu, preferując zamiast tego dłuższe frazy hasłowe. W przypadku danych uwierzytelniających między maszynami i kont serwisowych, 20 lub więcej losowych znaków z pełnego zestawu znaków to akceptowana podstawa w większości ram bezpieczeństwa i reżimów zgodności.

Dlaczego warto używać generatora haseł?

Ludzie są słabymi generatorami liczb losowych. Używamy tych samych haseł wielokrotnie, wybieramy słowa ze słownika, zastępujemy litery przewidywalnymi wzorcami (@ zamiast a, 3 zamiast e) i domyślnie stosujemy krótkie ciągi znaków. Generator haseł eliminuje ludzkie uprzedzenia z tego procesu.

🔐
Generowanie z poszanowaniem prywatności
Hasła są generowane wyłącznie w przeglądarce przy użyciu Web Crypto API. Żadne znaki nie opuszczają urządzenia, nic nie jest rejestrowane i żadne żądania sieciowe nie są wykonywane podczas generowania.
Natychmiastowe generowanie wsadowe
Generuj do 20 haseł jednocześnie jednym kliknięciem. Kopiuj pojedyncze hasła lub wszystkie naraz do skryptów aprowizacyjnych lub magazynów danych uwierzytelniających.
🛡️
Bez konta
Bez rejestracji, adresu e-mail ani plików cookie śledzących generowane hasła. Otwórz stronę, skonfiguruj opcje i generuj.
🎛️
Pełna kontrola zestawu znaków
Przełączaj niezależnie wielkie litery, małe litery, cyfry i symbole. Ustaw długość od 4 do 128 znaków, aby spełnić wymagania dowolnego systemu lub polityki.

Zastosowania generatora haseł

Frontend development
Generuj testowe hasła do walidacji formularzy, testowania długości pól wejściowych i tworzenia przepływów uwierzytelniania. Sprawdź, czy formularze logowania poprawnie obsługują hasła o długości 128 znaków i znaki specjalne.
Backend i DevOps
Twórz dane uwierzytelniające do baz danych, tokeny API i hasła kont serwisowych podczas konfiguracji infrastruktury. Używaj generowania wsadowego, aby aprowizować wiele usług w jednej sesji.
Inżynieria bezpieczeństwa
Generuj sekrety o wysokiej entropii dla kluczy szyfrowania, podpisywania HMAC i rotacji sekretów JWT. Ustaw długość na 64 lub więcej znaków dla sekretów, które muszą przekraczać 256 bitów entropii.
QA i testy penetracyjne
Testuj egzekwowanie polityki haseł, generując ciągi zawierające lub wykluczające określone zestawy znaków. Sprawdź, czy systemy poprawnie odrzucają hasła poniżej minimalnej długości lub złożoności.
Inżynieria danych
Generuj losowe dane uwierzytelniające dla środowisk testowych, baz danych stagingowych i sekretów potoków CI/CD. Unikaj ponownego użycia haseł produkcyjnych w danych testowych, generując nowe dla każdego środowiska.
Bezpieczeństwo kont osobistych
Twórz unikalne hasła dla każdego konta online. Połącz ten generator z menedżerem haseł, aby przechowywać dane uwierzytelniające, których nie musisz zapamiętywać.

Tabela entropii haseł

Entropia mierzy, jak nieprzewidywalne jest hasło. Oblicza się ją jako log2(rozmiar_zestawu_znaków ^ długość). Wyższa entropia oznacza więcej możliwych kombinacji, które atakujący musi przeszukać. NIST i OWASP zalecają co najmniej 80 bitów entropii dla aplikacji o wysokim poziomie bezpieczeństwa.

DługośćZestaw znakówEntropiaCzas ataku 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

Czasy łamania zakładają bilion zgadnięć na sekundę (atak offline z nowoczesnymi GPU). Ataki online z ograniczaniem liczby żądań są o rzędy wielkości wolniejsze.

CSPRNG vs Math.random() w generowaniu haseł

Źródło losowości ma równie duże znaczenie jak długość hasła. Hasło wygenerowane za pomocą przewidywalnego generatora liczb losowych może zostać odtworzone przez atakującego, który zna algorytm i stan ziarna. Narzędzie używa crypto.getRandomValues(), czyli kryptograficznie bezpiecznego pseudolosowego generatora liczb (CSPRNG) wbudowanego w każdą nowoczesną przeglądarkę.

crypto.getRandomValues()
Korzysta ze źródeł entropii systemu operacyjnego (sprzętowy RNG, czasy przerwań itp.). Dane wyjściowe są nieprzewidywalne nawet jeśli atakujący zna wszystkie poprzednie dane wyjściowe. Wymagane przez specyfikację W3C Web Crypto dla operacji wrażliwych na bezpieczeństwo.
Math.random()
Używa deterministycznego algorytmu zainicjowanego z ograniczonej puli entropii. Dane wyjściowe można przewidzieć, jeśli znany jest stan ziarna. Specyfikacja ECMAScript wprost stwierdza, że Math.random() nie zapewnia kryptograficznie bezpiecznych liczb losowych. Nigdy nie używaj go do generowania haseł.

Przykłady kodu

Generuj hasła programowo w różnych językach. Każdy poniższy przykład używa kryptograficznie bezpiecznego źródła losowości, a nie Math.random() ani równoważnych słabych 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"
}

Najczęściej zadawane pytania

Jak długie powinno być hasło?
Dla kont użytkowników 16 znaków z mieszanego zestawu znaków zapewnia ponad 100 bitów entropii, co jest wystarczające dla wszystkich aktualnych modeli zagrożeń. Dla sekretów maszynowych (klucze API, klucze szyfrowania) używaj 32 znaków lub więcej. NIST SP 800-63B ustala minimum 8 znaków, ale zaleca, aby systemy dopuszczały znacznie dłuższe hasła bez obcinania.
Czy korzystanie z tego generatora haseł jest bezpieczne?
Tak. Hasła są generowane w przeglądarce przy użyciu Web Crypto API (crypto.getRandomValues). Żadne dane nie są wysyłane na żaden serwer. Możesz to zweryfikować, otwierając zakładkę sieciową przeglądarki i obserwując, że po kliknięciu Generuj nie są wykonywane żadne żądania. Kod źródłowy to JavaScript po stronie klienta, widoczny w narzędziach deweloperskich przeglądarki.
Czym jest entropia hasła?
Entropia to miara losowości wyrażona w bitach. Hasło z N bitami entropii ma 2^N możliwych wartości. Na przykład hasło składające się z 20 znaków z 95 drukowalnych znaków ASCII ma log2(95^20) = 131,1 bita entropii. Każdy dodatkowy bit podwaja liczbę prób, których potrzebuje atakujący.
Czy powinienem używać symboli w hasłach?
Dodanie symboli zwiększa zestaw znaków z 62 (litery i cyfry) do 95 (drukowalne ASCII), co dodaje około 6,1 bita entropii na znak. Niektóre systemy ograniczają dozwolone symbole. Jeśli system odrzuca określone symbole, wyłącz opcję symboli i skompensuj to dłuższym hasłem. Hasło alfanumeryczne o długości 24 znaków ma więcej entropii niż hasło z symbolami o długości 16 znaków.
Dlaczego nie używać Math.random() do generowania haseł?
Math.random() nie jest kryptograficznie bezpieczny. Większość silników JavaScript implementuje go przy użyciu xorshift128+ lub podobnego szybkiego PRNG zaprojektowanego do symulacji i gier, a nie bezpieczeństwa. Atakujący, który obserwuje kilka danych wyjściowych, może odtworzyć stan wewnętrzny i przewidzieć wszystkie przyszłe dane wyjściowe. Web Crypto API korzysta ze źródeł entropii systemu operacyjnego, które nie są przewidywalne.
Czy mogę używać generowanych haseł jako kluczy API i tokenów?
Tak, ale weź pod uwagę wymagania dotyczące formatu docelowego systemu. Niektóre API oczekują kluczy zakodowanych w base64 lub ciągów szesnastkowych zamiast dowolnych znaków. Do generowania surowych sekretów używaj pełnego zestawu znaków przy 32 lub więcej znakach. W przypadku kluczy base64 generuj losowe bajty i koduj je osobno, zamiast traktować base64 jako zestaw znaków hasła.
Jak często należy zmieniać hasła?
NIST SP 800-63B (2017, zaktualizowany w 2024) odradza wymuszoną okresową rotację haseł użytkowników, ponieważ prowadzi ona do słabszych wyborów haseł. Zmieniaj hasła tylko wtedy, gdy istnieją dowody na naruszenie. Dla sekretów maszynowych i kont serwisowych rotuj zgodnie z modelem ryzyka organizacji, zazwyczaj co 90 dni w przypadku uprzywilejowanych danych uwierzytelniających.