Инструмент генерации и проверки паролей

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

Генератор паролей

Количество
Выберите группы символов
Подсказка: можно исключать, выбирая группы или непосредственно кликая по символам.
Результат

Тестер политик паролей

Результаты
  • Длина
  • Строчные буквы
  • Заглавные буквы
  • Цифры
  • Символы
  • Последовательности
  • Повторы
  • Чёрный список
Все проверки выполняются локально в вашем браузере.

Генератор фраз-паролей

Слова выбираются с использованием криптографически безопасного генератора (Web Crypto). Список слов в демонстрации ограничен по объёму.

Справочник хеширования паролей

Argon2id
  • Используйте Argon2id с разумными параметрами памяти
  • Не менее 2 итераций, память ≥ 64 МБ (настройте под среду)
  • Уникальная соль для каждого пользователя; при необходимости используйте pepper на уровне приложения
PBKDF2
  • Выберите SHA-256 или SHA-512, не менее 210 тыс. итераций (настройте под требования)
  • Уникальная соль для каждого хеша; поддержка обновления параметров
  • При следующем входе пользователя перейдите на более высокие параметры стоимости
BCrypt
  • Стоимость от 10 до 14, в зависимости от возможностей сервера
  • Избегайте усечения пароля; хешируйте полный пароль
  • Ограничьте и мониторьте точки аутентификации
Источники: NIST SP 800-63B, OWASP ASVS. Параметры должны соответствовать аппаратным возможностям и SLO.

Оценка сложности пароля

Сложность приблизительно рассчитывается по формуле энтропии: entropy = log2(размер алфавита) × длина. Больший алфавит и большая длина повышают устойчивость к подбору.

  • Слабый: < 50 бит — подходит только для одноразовых или низкозначимых сценариев
  • Удовлетворительный: 50–80 бит — приемлемо для сценариев с низким риском
  • Сильный: 80–110 бит — рекомендуемая целевая величина по умолчанию
  • Отличный: > 110 бит — подходит для администраторских или критически важных аккаунтов

Подсказка: Реальные модели атак могут отличаться; избегайте повторного использования паролей и включите двухфакторную аутентификацию (MFA).

Инструкции по использованию

  • Выберите длину и набор символов (строчные/заглавные буквы/цифры/символы); при необходимости включите опции «Исключить похожие» и «Требовать каждый»
  • Для более точного управления: исключите конкретные символы или группы символов, либо выберите группу символов
  • Нажмите «Сгенерировать»; для получения нескольких результатов включите пакетную генерацию и скопируйте всё одним кликом
  • Чтобы проверить существующий пароль — используйте «Проверщик политик»; чтобы создать легко запоминаемую фразу — воспользуйтесь «Генератором фраз-паролей»

Функциональные возможности

  • Криптографически безопасный генератор случайных чисел (Web Crypto)
  • Настраиваемые наборы символов и группы знаков
  • Фильтрация похожих символов и пользовательское исключение
  • Пакетная генерация, гарантия уникальности и статистика дубликатов
  • Оценка сложности и показатель энтропии
  • Проверщик политик и генератор фраз-паролей
  • Примеры кода на нескольких языках (JS、Python、PHP、Go、Java、C#、Rust)
  • Копирование одним кликом (один пароль / все)

Примеры генерации паролей

Надёжный (Strong)
Длина 24, включает строчные/заглавные буквы, цифры и символы
Легко запоминаемый (Memorable)
Длина 16, включает строчные/заглавные буквы и цифры, исключает похожие символы

База знаний о паролях

1) Сила пароля и энтропия
  • Энтропия ≈ log2(размер набора символов) × длина; вклад длины обычно выше
  • Рекомендуемая цель: обычные аккаунты ≥ 80 бит; аккаунты с высокими привилегиями/финансовые ≥ 110 бит
  • Больший набор символов + большая длина → выше устойчивость к подбору
2) Длина против сложности
  • Слепое добавление символов менее эффективно, чем увеличение длины
  • Избегайте предсказуемых шаблонов (например, всегда «заглавная первая буква + цифра в конце!»)
  • Сначала обеспечьте достаточную длину, затем умеренно увеличьте разнообразие символов
3) Распространённые ошибки и антишаблоны
  • Клавиатурные последовательности (qwerty), повторяющиеся блоки, даты рождения/годы — легко угадываются по правилам
  • «Базовый пароль + суффикс сайта» — это вариация повторного использования, создающая централизованный риск и легко угадываемая
  • Не используйте один и тот же пароль на нескольких сайтах
4) Рекомендации по управлению паролями
  • Используйте менеджер паролей; уникальный пароль для каждого сайта; включите MFA для важных аккаунтов
  • Не передавайте пароли в открытом виде через публичные каналы; при необходимости используйте «фонетически удобные» пароли
  • При обнаружении утечки или повторного использования немедленно измените пароль и обеспечьте его уникальность
5) Руководство по фразам-паролям (Passphrase)
  • Комбинации из 4–6 слов обычно надёжны и легко запоминаются
  • Смешивание разделителей, заглавных букв и вставка цифр повышают силу и читаемость
  • Избегайте прямого объединения распространённых фраз, текстов песен или цитат

Руководство по практике безопасности паролей

Лучшие практики
  • Используйте достаточную длину: для обычных аккаунтов — 16+ символов, для критически важных — 24+
  • Для запоминания предпочтительны фразы-пароли; для случайных高强度 паролей рекомендуется использовать менеджер паролей
  • По возможности включайте двухфакторную аутентификацию (MFA)
  • Не используйте один и тот же пароль на разных сайтах — каждый аккаунт должен иметь уникальный пароль
Энтропия и сила

Энтропия отражает непредсказуемость, основанную на длине и размере набора символов; чем выше количество бит энтропии, тем сильнее пароль.

  • Максимальную выгоду даёт увеличение длины
  • При возможности используйте несколько наборов символов
  • Чрезмерное исключение символов уменьшает размер набора и снижает надёжность
Политики и смена паролей
  • Отдавайте предпочтение длине и чёрным спискам запрещённых/скомпрометированных паролей, а не сложным правилам составления
  • Избегайте частого принудительного изменения паролей; меняйте их только при утечке или обнаружении риска
  • Используйте списки скомпрометированных паролей для блокировки распространённых и утекших паролей
Фразы-пароли
  • Используйте 4–6 случайных слов, соединённых разделителями, например: lake-CARROT-planet_7
  • Избегайте цитат, песен или других распространённых фраз; случайность важнее «умного» выбора
  • Для критически важных аккаунтов рекомендуется использовать менеджер паролей для хранения действительно высокой энтропии случайных паролей
Подсказки по настройке генерации
  • «Require each selected set» гарантирует, что хотя бы один символ из каждого выбранного набора будет присутствовать
  • «Avoid similar» повышает читаемость, но немного сокращает размер набора символов
  • Символы можно ограничить подмножеством, допустимым целевой системой
Хранение на сервере
  • Никогда не храните пароли в открытом виде; используйте сильные хеш-функции (Argon2id/PBKDF2/BCrypt) с солёными значениями
  • Настройте параметры (память/время/стоимость) должным образом; при необходимости используйте pepper
  • Ограничьте скорость попыток и мониторьте неудачные попытки; при атаках применяйте CAPTCHA или проверку устройства
Многофакторная аутентификация и восстановление
  • Предпочитайте TOTP/аппаратные ключи; избегайте SMS-аутентификации
  • Защищайте процессы восстановления: используйте многофакторную аутентификацию или подтверждение через электронную почту с задержкой
  • Предоставляйте резервные коды восстановления и рекомендуйте пользователям сохранять их в безопасности
Защита от перебора
  • Используйте прогрессивные задержки/блокировки и оценку рисков по IP/устройству
  • Настройте WAF/ограничение скорости для API и форм входа
  • Обнаруживайте атаки типа «撞库» и побуждайте пользователей использовать уникальные пароли
Локальное хранение и обработка
  • Используйте надёжные менеджеры паролей для хранения и автозаполнения
  • Не передавайте пароли в открытом виде через чат или электронную почту; для команд используйте инструменты управления секретами
  • Если необходимо записывать пароли вручную — обеспечьте физическую безопасность
Заявление: этот инструмент генерирует пароли локально в браузере с использованием Web Crypto; данные не отправляются на сервер.

Как генерировать пароли с помощью языков программирования

JavaScript(Web Crypto)
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');
  const bytes = new Uint32Array(length);
  crypto.getRandomValues(bytes);
  let out = '';
  for (let i = 0; i < length; i++) out += pool[bytes[i] % pool.length];
  return out;
}
Python(secrets)
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))
PHP(random_int)
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;
}
Go(crypto/rand)
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
}
Java(SecureRandom)
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();
  }
}
C#(.NET RandomNumberGenerator)
using System;
using System.Security.Cryptography;

public static class Pw {
  public static string RandomPassword(int length, string pool) {
    using var rng = RandomNumberGenerator.Create();
    var bytes = new byte[length];
    rng.GetBytes(bytes);
    var chars = new char[length];
    for (int i = 0; i < length; i++) {
      chars[i] = pool[bytes[i] % pool.Length];
    }
    return new string(chars);
  }
}
Rust(rand + getrandom)
use rand::rngs::OsRng;
use rand::RngCore;

fn random_password(length: usize, pool: &str) -> String {
    let mut bytes = vec![0u8; length];
    OsRng.fill_bytes(&mut bytes);
    let chars: Vec = pool.chars().collect();
    bytes
        .iter()
        .map(|b| chars[(*b as usize) % chars.len()])
        .collect()
}

fn main() {
    let pool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*+-=_~`|/?()[]{}<>,.;:'\"";
    let pw = random_password(16, pool);
    println!("{}", pw);
}