Генератор 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

    12: default в этом генераторе; 10: более быстрый выбор для легаси; 13: самый сильный уровень этого инструмента. Каждый +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 Вне диапазона этого инструмента (максимум 13)

Каждый 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.

Каждый +1 примерно удваивает время hash, поэтому cost 13 занимает примерно в 8 раз больше времени, чем cost 10. Оставайтесь в диапазоне 10-12, если приложение действительно не требует дополнительной прочности.

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

Генератор ключей API случайного типа

Создавайте на сервере ключи API длиной 8–128 символов в формате hex, base64url или алфавитно-цифровом формате либо UUIDv4.

Генератор ключей PGP

Создайте пару ключей OpenPGP в текстовом формате ASCII и сертификат отзыва с Curve25519, RSA 2048 или RSA 4096.

Шифр из числа в букву

Преобразуйте числа в буквы и обратно по шифру A=1, B=2 (A1Z26) для головоломок, загадок и подсказок в квест-комнатах.

Генератор SSL-сертификатов

Создайте самоподписанный сертификат SSL/TLS и закрытый ключ RSA полностью в браузере. Свои Common Name, SAN и срок действия, экспорт в PEM.

Генератор MD5

Создайте хеш MD5 для любого текста или файла. Результат, 128-битное значение в шестнадцатеричном формате, вычисляемое полностью в вашем браузере.

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

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

Инструмент доступен на других языках