Password Generator

Генерируйте надёжные случайные пароли с настраиваемой длиной и наборами символов

Длина20
Количество5

Что такое генератор паролей?

Генератор паролей создаёт случайные строки символов, используемые в качестве паролей для учётных записей пользователей, API-ключей, учётных данных баз данных и секретов шифрования. В отличие от паролей, придуманных человеком, сгенерированные пароли охватывают всё пространство возможных комбинаций символов, что делает их устойчивыми к атакам по словарю и угадыванию по шаблонам. Этот инструмент генерирует надёжные случайные пароли онлайн, используя встроенный криптографический генератор случайных чисел вашего браузера.

Надёжность пароля зависит от двух факторов: длины и разнообразия символов. Пароль из 20 символов, включающий заглавные и строчные буквы, цифры и спецсимволы, имеет около 131 бита энтропии. На таком уровне атаке перебором, проверяющей один триллион вариантов в секунду, потребовалось бы больше времени, чем возраст Вселенной, чтобы перебрать все комбинации. Формула проста: энтропия = длина × log2(размер алфавита).

Стандарты вроде NIST SP 800-63B рекомендуют пароли длиной не менее 8 символов без верхнего предела, задаваемого верификатором, и не поощряют принудительные правила состава — например, требование ровно одного спецсимвола — отдавая предпочтение более длинным парольным фразам. Для межмашинных учётных данных и сервисных аккаунтов 20 и более случайных символов из полного набора является принятым базовым требованием в большинстве систем безопасности и нормативных режимов.

Зачем использовать генератор паролей?

Люди плохо справляются с генерацией случайных чисел. Мы повторно используем пароли, выбираем словарные слова, заменяем буквы предсказуемыми шаблонами (@ вместо a, 3 вместо e) и по умолчанию создаём короткие строки. Генератор паролей исключает человеческую предвзятость из этого процесса.

🔐
Генерация с приоритетом приватности
Пароли генерируются полностью в вашем браузере с использованием Web Crypto API. Ни один символ не покидает ваше устройство, ничего не записывается в журналы, и никаких сетевых запросов при генерации не выполняется.
Мгновенный пакетный вывод
Генерируйте до 20 паролей за раз одним нажатием. Копируйте отдельные пароли или все сразу для скриптов подготовки инфраструктуры или хранилищ учётных данных.
🛡️
Без учётной записи
Без регистрации, без электронной почты, без файлов cookie, отслеживающих сгенерированные пароли. Откройте страницу, настройте параметры и генерируйте.
🎛️
Полный контроль над набором символов
Независимо включайте и отключайте заглавные буквы, строчные буквы, цифры и спецсимволы. Устанавливайте длину от 4 до 128 символов в соответствии с требованиями любой системы или политики.

Сценарии использования генератора паролей

Frontend-разработка
Генерируйте тестовые пароли для проверки форм, тестирования максимальной длины ввода и разработки аутентификационных сценариев. Убедитесь, что ваши формы входа корректно обрабатывают пароли из 128 символов и спецсимволы.
Backend и DevOps
Создавайте учётные данные для баз данных, API-токены и пароли сервисных аккаунтов при настройке инфраструктуры. Используйте пакетную генерацию для подготовки нескольких сервисов за один сеанс.
Security-инженерия
Генерируйте высокоэнтропийные секреты для ключей шифрования, подписи HMAC и ротации секретов JWT. Устанавливайте длину 64+ символа для секретов, которым необходимо превышать 256 бит энтропии.
QA и тестирование на проникновение
Тестируйте применение политик паролей, генерируя строки с включением или исключением конкретных наборов символов. Проверяйте, что системы правильно отклоняют пароли ниже минимальной длины или сложности.
Data Engineering
Генерируйте случайные учётные данные для тестовых сред, промежуточных баз данных и секретов CI/CD-пайплайнов. Избегайте повторного использования боевых паролей в тестовых данных, генерируя новые для каждой среды.
Безопасность личных аккаунтов
Создавайте уникальные пароли для каждого онлайн-аккаунта. Используйте этот генератор совместно с менеджером паролей для хранения учётных данных, которые не нужно запоминать.

Справочник по энтропии паролей

Энтропия измеряет непредсказуемость пароля и вычисляется как log2(размер_алфавита ^ длина). Чем выше энтропия, тем больше возможных комбинаций придётся перебрать злоумышленнику. NIST и OWASP рекомендуют не менее 80 бит энтропии для приложений с высоким уровнем безопасности.

ДлинаНабор символовЭнтропияВремя перебора
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

Время взлома рассчитано из расчёта 1 триллиона попыток в секунду (офлайн-атака на современных GPU). Онлайн-атаки с ограничением частоты запросов на несколько порядков медленнее.

CSPRNG vs Math.random() для генерации паролей

Источник случайности имеет не меньшее значение, чем длина пароля. Пароль, сгенерированный предсказуемым генератором случайных чисел, может быть восстановлен злоумышленником, знающим алгоритм и начальное состояние. Этот инструмент использует crypto.getRandomValues() — криптографически стойкий генератор псевдослучайных чисел (CSPRNG), встроенный в каждый современный браузер.

crypto.getRandomValues()
Использует источники энтропии операционной системы (аппаратный RNG, тайминги прерываний и т. д.). Вывод непредсказуем, даже если злоумышленник знает все предыдущие значения. Требуется спецификацией W3C Web Crypto для операций, критичных с точки зрения безопасности.
Math.random()
Использует детерминированный алгоритм, инициализированный из ограниченного пула энтропии. Вывод можно предсказать, если известно начальное состояние. Спецификация 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"
}

Часто задаваемые вопросы

Какой длины должен быть пароль?
Для учётных записей пользователей 16 символов из смешанного набора обеспечивают более 100 бит энтропии, что достаточно для всех актуальных моделей угроз. Для машинных секретов (API-ключей, ключей шифрования) используйте 32 символа и более. NIST SP 800-63B устанавливает минимум 8 символов, но рекомендует, чтобы системы допускали значительно более длинные пароли без усечения.
Безопасно ли использовать этот генератор паролей?
Да. Пароли генерируются в вашем браузере с использованием Web Crypto API (crypto.getRandomValues). Никакие данные не отправляются на сервер. Вы можете убедиться в этом, открыв вкладку «Сеть» в инструментах разработчика и убедившись, что при нажатии кнопки генерации никаких запросов не выполняется. Исходный код — клиентский JavaScript, доступный в инструментах разработчика браузера.
Что такое энтропия пароля?
Энтропия — это мера случайности, выражаемая в битах. Пароль с N битами энтропии имеет 2^N возможных значений. Например, пароль из 20 символов, выбранных из 95 печатаемых символов ASCII, имеет log2(95^20) = 131,1 бита энтропии. Каждый дополнительный бит удваивает количество попыток, необходимых злоумышленнику.
Стоит ли использовать спецсимволы в паролях?
Включение спецсимволов расширяет алфавит с 62 (буквы + цифры) до 95 (печатаемые символы ASCII), что добавляет около 6,1 бита энтропии на каждый символ. Некоторые системы ограничивают допустимые спецсимволы. Если система отвергает определённые символы, отключите эту опцию и компенсируйте это более длинным паролем. Буквенно-цифровой пароль из 24 символов имеет больше энтропии, чем пароль из 16 символов со спецсимволами.
Почему нельзя использовать Math.random() для генерации паролей?
Math.random() не является криптографически стойким. Большинство JavaScript-движков реализуют его на основе xorshift128+ или аналогичного быстрого PRNG, предназначенного для симуляций и игр, а не для задач безопасности. Злоумышленник, наблюдавший несколько выходных значений, может восстановить внутреннее состояние и предсказать все будущие значения. Web Crypto API использует источники энтропии операционной системы, которые не поддаются предсказанию.
Можно ли использовать сгенерированные пароли в качестве API-ключей и токенов?
Да, но учитывайте требования к формату целевой системы. Некоторые API ожидают ключи в формате base64 или шестнадцатеричные строки, а не произвольные символы. Для генерации сырых секретов используйте полный набор символов при длине 32+ символа. Для ключей в формате base64 генерируйте случайные байты и кодируйте их отдельно, не трактуя base64 как набор символов для пароля.
Как часто нужно менять пароли?
NIST SP 800-63B (2017, обновлён в 2024 году) не рекомендует принудительную периодическую смену паролей пользователей, поскольку это приводит к выбору более слабых паролей. Меняйте пароли только при наличии признаков компрометации. Для машинных секретов и сервисных аккаунтов следуйте модели рисков вашей организации — как правило, каждые 90 дней для учётных данных с высокими привилегиями.