Хеши/крипто
Bcrypt Hash + Verify
Хеширование паролей через bcrypt (со случайной солью и настраиваемой стоимостью) и проверка пароля против имеющегося bcrypt-хеша.
Bcrypt — это намеренно медленный алгоритм хеширования паролей: в отличие от MD5 или SHA-256, он специально требует больших вычислений, чтобы перебор паролей методом брутфорса оставался непрактичным даже при утечке базы хешей.
Как пользоваться
- Хеширование: введите пароль и укажите cost factor (стоимость) — большее число означает более медленное и безопасное хеширование.
- Каждый вызов хеширования генерирует новую случайную соль, поэтому одинаковый пароль каждый раз даёт разный хеш — это нормально и ожидаемо.
- Проверка: вставьте пароль и уже существующий bcrypt-хеш, чтобы проверить, совпадают ли они, без необходимости хешировать вручную повторно.
Типичные сценарии
- Ручная проверка, что бэкенд корректно хеширует пароли перед сохранением в базу.
- Генерация тестового bcrypt-хеша для seed-данных или fixtures в разработке.
- Диагностика, почему не проходит логин — сравнение введённого пароля с хешем в базе.
Что стоит помнить
Cost factor стоит подбирать так, чтобы хеширование занимало примерно 100–300 мс на целевом сервере — это баланс между безопасностью и нагрузкой при логине.
Bcrypt обрезает пароли длиннее 72 байт — символы сверх этого предела игнорируются алгоритмом.
Статья об этом инструменте: Bcrypt: почему пароли хешируют медленно, а не быстро
Часто задаваемые вопросы
Зачем в bcrypt есть фактор "cost" (сложность)?
Фактор сложности определяет, сколько раз хеширование повторяется внутри алгоритма, поэтому с ростом значения хеширование становится экспоненциально медленнее. Это позволяет намеренно держать его достаточно медленным, чтобы противостоять перебору даже по мере роста мощности оборудования.
Почему хеш bcrypt всегда одинаковой длины независимо от пароля?
Bcrypt выдаёт хеш фиксированной длины (обычно 60 символов), который кодирует версию алгоритма, фактор сложности, соль и сам хеш вместе — длина не зависит от длины исходного пароля.
Нужно ли отдельное поле для соли в bcrypt?
Нет. Соль генерируется автоматически и встраивается прямо в строку результата, поэтому хранить или управлять ею отдельно не нужно — она включена всякий раз, когда вы проверяете пароль по хешу.
Есть ли ограничение на длину пароля в bcrypt?
Да, bcrypt обрабатывает только первые 72 байта пароля — всё, что длиннее, просто отбрасывается без предупреждения. На практике это редко проблема, но стоит помнить об этом ограничении при работе с очень длинными паролями или не-ASCII символами, где один символ может занимать несколько байт.
Почему bcrypt всё ещё рекомендуют, если есть Argon2?
Bcrypt десятилетиями проверен на практике, широко поддерживается во всех языках и фреймворках и остаётся вполне надёжным выбором. Argon2 рекомендуют как приоритетный для новых систем из-за защиты от атак на GPU/ASIC, но bcrypt не считается небезопасным — лишь менее устойчивым к специализированному оборудованию.