Генератор и проверка паролей
Профессиональный инструмент для генерации и проверки паролей, создающий надежные пароли и легко запоминаемые фразы-пароли с поддержкой пакетной генерации, гарантией уникальности, оценкой сложности и проверкой на соответствие политикам. Имеет криптографически безопасный источник случайных чисел, настраиваемые наборы символов, фильтрацию похожих символов, статистику удаления дубликатов в пакете и функцию копирования в один клик. Включает многоязычные примеры кода, базу знаний о паролях, рекомендации по безопасности и инструменты для тестирования политик. Все операции выполняются локально в вашем браузере, что гарантирует конфиденциальность и безопасность.
Генератор паролей
-
#
Тестировщик политик паролей
- Длина
- Строчные буквы
- Заглавные буквы
- Цифры
- Символы
- Последовательности
- Повторения
- Список блокировки
Генератор парольной фразы
Шпаргалка по хешированию паролей
- Используйте Argon2id с разумными параметрами, требующими значительного объема памяти
- Время ≥ 2 проходов, объем памяти ≥ 64 МБ (подберите параметры под вашу среду)
- Храните уникальную соль для каждого пользователя; по желанию используйте перцевую фазу на уровне приложения
- Выберите SHA-256 или SHA-512 с количеством итераций ≥ 210 тыс. (подберите по необходимости)
- Используйте уникальную соль для каждого хеша; поддерживайте обновление параметров
- Переходите на параметры с более высокой стоимостью во время следующего входа пользователя
- Установите стоимость в диапазоне 10–14 в зависимости от возможностей сервера
- Избегайте проблем с усечением; хешируйте весь пароль
- Реализуйте ограничение скорости и мониторинг на эндпоинтах аутентификации
Оценщик сложности пароля
Сложность приблизительно определяется энтропией: энтропия = log2(размер набора символов) × длина. Больший набор символов и большая длина повышают устойчивость к подбору.
- Слабый: < 50 бит — подходит только для одноразовых сценариев или ситуаций с низким уровнем важности
- Удовлетворительный: 50–80 бит — допустимо для сценариев с низким уровнем риска
- Надежный: 80–110 бит — рекомендуемая целевая величина по умолчанию
- Отличный: > 110 бит — рекомендуется для административных учетных записей или критичных аккаунтов
Примечание: Модели атак в реальной жизни могут отличаться; избегайте повторного использования паролей и включите многофакторную аутентификацию (MFA).
Как использовать
- Выберите длину и набор символов (строчные/прописные/цифры/символы); при необходимости включите опции «Избегать похожих» и «Требовать каждый из типа»
- Для более точного контроля: исключите определенные символы или группы символов, или выберите подмножества символов
- Выберите, сколько паролей нужно сгенерировать, затем нажмите «Сгенерировать»; результаты пакетной генерации автоматически удаляют дубликаты, их можно скопировать сразу все
- Для проверки существующих паролей используйте Тестировщик политик; для легко запоминаемых фраз-паролей используйте Генератор фраз-паролей
Возможности
- Криптографически безопасный источник случайных чисел (Web Crypto)
- Настраиваемые наборы символов и группы символов
- Фильтрация похожих символов и пользовательские исключения
- Пакетная генерация 1-100 уникальных паролей
- Метрики сложности и энтропии
- Тестировщик политик и Генератор фраз-паролей
- Многоязычные примеры кода
- Копирование в один клик (одного или всех сразу)
База знаний о паролях
- Энтропия ≈ log2(размер набора символов) × длина; длина обычно влияет больше
- Рекомендуемые целевые значения: для обычных учетных записей ≥ 80 бит; для учетных записей с высокими правами/финансовых ≥ 110 бит
- Более большой набор символов + большая длина → выше сопротивление подбору
- Бездумное добавление символов менее эффективно, чем увеличение длины
- Избегайте предсказуемых паттернов (например, всегда «Прописная первая буква + заключительная цифра!» )
- Приоритет: достаточная длина, затем умеренное увеличение разнообразия символов
- Клавиатурные последовательности (например, qwerty), повторяющиеся блоки, дни рождения/годы легко подбираются под правила
- Использование «базовый пароль + суффикс сайта» создает повторяющиеся варианты, концентрирует риск и упрощает подбор паролей
- Никогда не используйте один и тот же пароль на разных сайтах
- Используйте менеджер паролей; используйте уникальные пароли для каждого сайта; включите многофакторную аутентификацию для важных учетных записей
- Избегайте передачи паролей в открытом виде по общедоступным каналам; при необходимости используйте «произносимые» фразы-пароли
- Немедленно изменяйте пароли и делайте их уникальными при обнаружении утечки или повторного использования
- Комбинации из 4–6 случайных слов обычно надежны и легко запоминаются
- Смешивайте разделители, делайте заглавными первые буквы и добавляйте цифры для повышения надежности и удобства запоминания
- Избегайте прямого соединения общих фраз, текстов песен или известных цитат
Рекомендации по безопасности паролей
- Используйте достаточную длину: 16+ символов для обычных аккаунтов, 24+ — для критически важных
- Для удобства запоминания предпочитайте парольные фразы; используйте менеджер паролей для хранения случайных высоконадежных паролей
- Включайте многофакторную аутентификацию (MFA) везде, где возможно
- Никогда не используйте одни и те же пароли на разных сайтах — для каждого аккаунта нужен уникальный пароль
Энтропия измеряет непредсказуемость на основе длины и размера набора символов — чем больше битов энтропии, тем надежнее обычно пароль.
- Для максимального повышения надежности в первую очередь увеличивайте длину
- Если возможно, используйте несколько наборов символов
- Если исключить слишком много символов, набор доступных символов станет меньше, что снизит надежность
- Предпочитайте требования к длине и черные списки распространенных/утекших паролей вместо сложных правил составления
- Избегайте частой обязательной смены паролей; меняйте их только при обнаружении утечки или риска
- Используйте списки скомпрометированных паролей для блокировки часто используемых или утекших
- Используйте 4–6 случайных слов, соединенных разделителями, например, lake-CARROT-planet_7
- Избегайте известных цитат, текстов песен или других распространенных фраз; случайность важнее «оригинальности»
- Для критически важных аккаунтов используйте менеджер паролей для хранения действительно случайных паролей с высокой энтропией
- «Требовать каждый выбранный набор» гарантирует, что хотя бы один символ из каждой выбранной категории будет присутствовать
- «Избегать похожих» улучшает удобство запоминания, но немного уменьшает размер набора символов
- Символы можно ограничить подмножеством, поддерживаемым целевой системой
- Никогда не храните пароли в открытом виде; используйте надежное хеширование (Argon2id/PBKDF2/Bcrypt) с солью
- Настраивайте параметры (память/время/стоимость) соответствующим образом; при необходимости используйте пеппер
- Ограничивайте частоту попыток входа и отслеживайте неудачные попытки; при атаках применяйте CAPTCHA или проверку по устройству
- Предпочитайте TOTP или аппаратные ключи; по возможности избегайте SMS
- Организуйте безопасные процессы восстановления с использованием многофакторной аутентификации или проверки по электронной почте и установите период ожидания
- Предоставляйте резервные коды восстановления и рекомендуйте пользователям хранить их в надежном месте
- Внедряйте постепенные задержки или блокировку с оценкой риска по IP/устройству
- Применяйте WAF и ограничение частоты запросов к API и формам входа
- Отслеживайте подбор учетных данных и рекомендуйте пользователям использовать уникальные пароли
- Используйте надежный менеджер паролей для хранения и автозаполнения
- Никогда не передавайте пароли в открытом виде через чат или email; для команд используйте инструменты управления секретами
- Если записываете пароли офлайн, обеспечьте их физическую защиту
Как генерировать пароли с помощью языков программирования
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;
}
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))
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;
}
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
}
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();
}
}
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);
}
}
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);
}