Генератор и проверка паролей

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

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

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

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

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

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

Слова выбираются равномерно с криптографически надежным случайнымness (Web Crypto) из списка из 1271 однозначного слова; 6 слов дают около 62 бит энтропии — используйте 8 слов для большей надежности.

Шпаргалка по хешированию паролей

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

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

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

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

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

Как использовать

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

Возможности

  • Криптографически безопасный источник случайных чисел (Web Crypto)
  • Настраиваемые наборы символов и группы символов
  • Фильтрация похожих символов и пользовательские исключения
  • Пакетная генерация 1-100 уникальных паролей
  • Метрики сложности и энтропии
  • Тестировщик политик и Генератор фраз-паролей
  • Многоязычные примеры кода
  • Копирование в один клик (одного или всех сразу)

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

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

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

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

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

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

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

  • Для максимального повышения надежности в первую очередь увеличивайте длину
  • Если возможно, используйте несколько наборов символов
  • Если исключить слишком много символов, набор доступных символов станет меньше, что снизит надежность
Правила и смена паролей
  • Предпочитайте требования к длине и черные списки распространенных/утекших паролей вместо сложных правил составления
  • Избегайте частой обязательной смены паролей; меняйте их только при обнаружении утечки или риска
  • Используйте списки скомпрометированных паролей для блокировки часто используемых или утекших
Парольные фразы
  • Используйте 4–6 случайных слов, соединенных разделителями, например, lake-CARROT-planet_7
  • Избегайте известных цитат, текстов песен или других распространенных фраз; случайность важнее «оригинальности»
  • Для критически важных аккаунтов используйте менеджер паролей для хранения действительно случайных паролей с высокой энтропией
Советы по настройке генерации
  • «Требовать каждый выбранный набор» гарантирует, что хотя бы один символ из каждой выбранной категории будет присутствовать
  • «Избегать похожих» улучшает удобство запоминания, но немного уменьшает размер набора символов
  • Символы можно ограничить подмножеством, поддерживаемым целевой системой
Хранение на стороне сервера
  • Никогда не храните пароли в открытом виде; используйте надежное хеширование (Argon2id/PBKDF2/Bcrypt) с солью
  • Настраивайте параметры (память/время/стоимость) соответствующим образом; при необходимости используйте пеппер
  • Ограничивайте частоту попыток входа и отслеживайте неудачные попытки; при атаках применяйте CAPTCHA или проверку по устройству
Многофакторная аутентификация и восстановление
  • Предпочитайте TOTP или аппаратные ключи; по возможности избегайте SMS
  • Организуйте безопасные процессы восстановления с использованием многофакторной аутентификации или проверки по электронной почте и установите период ожидания
  • Предоставляйте резервные коды восстановления и рекомендуйте пользователям хранить их в надежном месте
Защита от перебора паролей
  • Внедряйте постепенные задержки или блокировку с оценкой риска по IP/устройству
  • Применяйте WAF и ограничение частоты запросов к API и формам входа
  • Отслеживайте подбор учетных данных и рекомендуйте пользователям использовать уникальные пароли
Локальное хранение и обработка
  • Используйте надежный менеджер паролей для хранения и автозаполнения
  • Никогда не передавайте пароли в открытом виде через чат или email; для команд используйте инструменты управления секретами
  • Если записываете пароли офлайн, обеспечьте их физическую защиту
Отказ от ответственности: Этот инструмент генерирует пароли локально в вашем браузере с использованием 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');
  // Rejection sampling removes modulo bias
  const limit = Math.floor(0x100000000 / pool.length) * pool.length;
  const buf = new Uint32Array(1);
  let out = '';
  for (let i = 0; i < length; i++) {
    do { crypto.getRandomValues(buf); } while (buf[0] >= limit);
    out += pool[buf[0] % 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) {
    // GetInt32 draws an unbiased value in [0, pool.Length)
    var chars = new char[length];
    for (int i = 0; i < length; i++) {
      chars[i] = pool[RandomNumberGenerator.GetInt32(pool.Length)];
    }
    return new string(chars);
  }
}
Rust (rand + getrandom)
use rand::rngs::OsRng;
use rand::Rng;

fn random_password(length: usize, pool: &str) -> String {
    // gen_range is uniform, so there is no modulo bias
    let chars: Vec = pool.chars().collect();
    (0..length)
        .map(|_| chars[OsRng.gen_range(0..chars.len())])
        .collect()
}

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