Генератор bcrypt

bcrypt все еще остается одним из самых безопасных вариантов для хранения паролей. Он намеренно медленный, сам создает salt и масштабируется под рост мощности железа через настраиваемый cost parameter. Этот generator создает standards-compliant bcrypt hash из plaintext password, чтобы вы могли seed test user, перенести account между системами или сравнить значения с существующим hash, сохраненным в колонке users.password.

Как hash пароль с bcrypt

  1. 1

    Введите plaintext password

    До 72 bytes — bcrypt silently truncates все, что дальше.

  2. 2

    Выберите cost factor

    10 — текущий default; 12 часто используют для новых систем; 14 — paranoid. Каждый +1 примерно удваивает hash time.

  3. 3

    Генерируется random salt

    16 bytes salt берутся из cryptographic RNG и встраиваются в итоговую hash string.

  4. 4

    Скопируйте hash

    Output — self-describing string вроде `$2b$12$...`, включающая version, cost, salt и digest.

Анатомия bcrypt hash

$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
  |   |  |                      |
  |   |  salt (22 Base64 chars)  digest (31 Base64 chars)
  |   cost (2 digits, 4-31)
  version (2a, 2b, 2y — all bcrypt)

Вся строка занимает 60 characters. Колонки типа VARCHAR(60) или CHAR(60) — стандартная schema.

Рекомендации по cost factor

Cost Примерное время на один hash (CPU 2024) Применение
10 ~80 ms Прежний default, все еще приемлемо
12 ~300 ms Текущая рекомендуемая база
13 ~600 ms Приложения с повышенной безопасностью
14 ~1.2 s Параноидальный; заметная задержка входа

Каждый increment удваивает work factor. Если login latency ниже 500 ms критична, оставайтесь на 10-12.

Version byte: 2a vs 2b vs 2y

  • $2a$ — оригинальная specification 1999 года. Большинство libraries выпускают 2a hashes.
  • $2b$ — ревизия 2014 года, исправившая truncation bug в crypt_blowfish. Предпочтительно для новых hashes.
  • $2y$ — PHP-specific tag, функционально эквивалентный $2b$.

Все три variants verify друг против друга; отличается только tag в hash string.

От чего защищает bcrypt

  • Rainbow tables — уникальный per-hash salt ломает precomputed lookups.
  • GPU/ASIC cracking — Blowfish key schedule memory-bound и недружелюбен к GPU. Не так GPU-hostile, как Argon2, но все равно замедляет brute force.
  • Database leaks — plaintext невозможно восстановить из hash без brute force.

От чего bcrypt НЕ защищает: слабые пароли (используйте minimum length и проверку по breach lists), credential stuffing (используйте second factor), phishing.

Лимит 72-byte

bcrypt использует только первые 72 bytes пароля. Более длинные inputs silently truncated — по этой же причине многие libraries теперь рекомендуют pre-hashing password через SHA-256 перед передачей в bcrypt. У современных альтернатив (Argon2, scrypt) такого лимита нет.

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

Да, для хранения паролей при cost ≥ 12. OWASP все еще относит его к acceptable algorithms. Argon2id — предпочтительный выбор для новых систем, но миграция legacy bcrypt hashes обычно не является срочной задачей.

Потому что salt генерируется randomly для каждого hash. Verification берет salt из сохраненного hash, снова hashes submitted password с ним и сравнивает.

Большинство libraries этого не предоставляет, и не зря — predictable salts убивают смысл. Используйте salt, сгенерированный library; это secure path.

Да — work factor симметричен. Verify hash с cost-14 занимает в 16x больше времени, чем verify cost-10. Настраивайте с учетом login throughput.

Сопутствующие инструменты

Кодировщик шифра A1Z26

Кодируйте текст шифром A1Z26 (A=1, B=2, ... Z=26) или декодируйте числовую последовательность обратно в буквы, выбрав разделитель.

Шифрование / расшифровка AES

Шифруйте и расшифровывайте текст низкого риска с AES-шифрами OpenSSL. Парольная фраза хэшируется SHA-256, а Base64-вывод содержит IV плюс шифротекст.

Кодировщик шифра Атбаш

Кодируйте или декодируйте текст шифром Атбаш, еврейской заменой, где A-Z отображается в Z-A. Одна и та же операция шифрует и расшифровывает.

Кодировщик и декодировщик Base32

Кодируйте и декодируйте строки Base32 с алфавитом RFC 4648. Полезно для секретов TOTP, регистронезависимых токенов и идентификаторов, которые вводит человек.

Кодировщик и декодировщик Base85

Кодируйте и декодируйте Base85 в вариантах Adobe Ascii85 (PostScript/PDF) или Z85 (ZeroMQ). Компактнее Base64 для двоичных данных.

Генератор bcrypt-хешей

Генерируйте bcrypt-хеши или проверяйте пароль в открытом виде относительно существующего bcrypt-хеша. Генерация и проверка рядом в одном инструменте.