Инструмент генерации и проверки паролей
Генерируйте надёжные пароли и фразы-пароли, поддерживайте пакетную генерацию, уникальность, проверку сложности и политик, а также получайте примеры кода на нескольких языках и полезные знания.
Генератор паролей
Количество
Выберите группы символов
×
Подсказка: можно исключать, выбирая группы или непосредственно кликая по символам.
Результат
Энтропия
Сложность:
Сгенерировано
элементов
-
#
Повторы:
(Запрошено ,
Уникальные
)
Не найдено достаточного количества уникальных комбинаций; уменьшите количество или расширьте набор символов.
Энтропия
Сложность:
Тестер политик паролей
Результаты
- Длина
- Строчные буквы
- Заглавные буквы
- Цифры
- Символы
- Последовательности
- Повторы
- Чёрный список
Все проверки выполняются локально в вашем браузере.
Генератор фраз-паролей
Слова выбираются с использованием криптографически безопасного генератора (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)
- Копирование одним кликом (один пароль / все)
База знаний о паролях
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);
}