Инструменты
Руководства

bcrypt хеширование и проверка

Крипто

Хешируйте пароль с помощью bcrypt (адаптивная стоимость), или проверьте открытый текст по существующему хешу $2a$ / $2b$. Настраиваемая стоимость, калибровка времени — всё в вашем браузере.

100 % на клиенте Без бэкенда

Удалённые URL не запрашиваются; вставьте JSON напрямую.

Режим
12

⚠ Чем выше стоимость, тем медленнее и безопаснее

Введите пароль и нажмите Хешировать (cost %n).
bcrypt

🔒 Обрабатывается локально — ничего не покидает браузер
На этой странице

Что такое bcrypt?#

bcrypt — это функция хеширования паролей, специально построенная, чтобы быть медленной по замыслу. Если быстрый хеш вроде SHA-256 рассчитан на пропуск мегабайт в секунду, то bcrypt рассчитан на реальную стоимость одного предположения — чтобы атакующий, укравший базу хешей паролей, не мог дёшево перебрать миллиарды вариантов. Это стандартный ответ на вопрос «как хранить пароли пользователей»: хешируйте их через bcrypt, а не через обычный SHA-256.

Для этой задачи bcrypt подходит по двум причинам. Во-первых, у него настраиваемый фактор стоимости, масштабирующий работу экспоненциально — повышение стоимости на 1 примерно удваивает время одного хеширования, так что более быстрое железо можно обогнать, просто повернув «ручку». Во-вторых, он встраивает случайную соль в каждый хеш, поэтому одинаковые пароли хешируются в совершенно разные значения, а заранее вычисленная таблица для одной базы бесполезна против другой. И соль, и стоимость переносятся в самой выходной строке, поэтому для проверки нужен только пароль и хеш.

Страница делает обе операции: хеширует пароль в строку bcrypt и проверяет пароль по существующему хешу. Чтобы страница оставалась отзывчивой, хеширование со стоимостью 12 и выше уходит в Web Worker — тяжёлые вычисления не замораживают интерфейс.

Как пользоваться#

  1. Выберите режим: Хешировать (получить bcrypt-строку из пароля) или Проверить (сверить пароль с существующим хешем).
  2. Введите пароль. Нажмите значок глаза, чтобы показать его при вводе; по умолчанию он скрыт. Принимается UTF-8, включая эмодзи и нелатинские письменности.
  3. В режиме хеширования установите ползунок фактора стоимости (4–14, по умолчанию 12). Выше — медленнее и сильнее. При достаточной для заметного ожидания стоимости появляется предупреждение.
  4. В режиме проверки вставьте существующий хеш в появившееся поле. Стоимость считывается автоматически из самого хеша — задавать её не нужно.
  5. Нажмите главную кнопку. В режиме хеширования выход — bcrypt-строка; в режиме проверки — ясный вердикт «совпадает / не совпадает» плюс показатель прошедшего времени, который помогает оценить стоимость на вашем железе.

Ключевые возможности#

  • Настраиваемая стоимость 4–14. Значение по умолчанию 12 — современная рекомендация; каждый шаг примерно удваивает работу, так что вы можете поспевать за ускоряющимся железом с годами.
  • Выгрузка в Worker при высокой стоимости. Стоимость 12 и выше выполняется в Web Worker, поэтому страница остаётся отзывчивой; если воркеры заблокированы, прозрачно откатывается на главный поток с тем же результатом.
  • Встроенная соль. Каждый хеш получает свежую случайную соль, закодированную в выходе, поэтому один и тот же пароль никогда не хешируется дважды в одну и ту же строку.
  • Проверка с автоматической стоимостью. Фактор стоимости извлекается из вставленного вами хеша, поэтому нет рассогласования между тем, как пароль был хеширован, и тем, как он проверяется.
  • Без отправки данных. Хеширование и проверка локальны; пароль не покидает страницу.

Разбор примера#

Ниже — настоящий хеш hunter2 при стоимости 12, полученный на этой самой странице. Поскольку соль свежеслучайная, повторное хеширование hunter2 даст другую строку — но эта подлинная и проверяемая: вставьте её в режим проверки, введите hunter2, и вердикт — совпадает.

$2b$12$DG/IWIDBmJlywamLdGno2.guEH5lGnQ1OTULdIGN8BH1vqiLIGzjy

Разбор по полям:

  • $2b$ — вариант bcrypt (bcryptjs выдаёт $2b$; проверка также принимает $2a$, $2x$, $2y$).
  • 12 — фактор стоимости, то есть 2^12 раундов расширения ключа.
  • следующие 22 символа — случайная соль.
  • последние 31 символ — производный хеш.

Переключитесь на Проверить, бросьте хеш выше в поле существующего хеша, введите hunter2 — вердикт совпадает. Введите вместо этого Hunter2, и будет не совпадает: bcrypt чувствителен к регистру, и один неверный символ переворачивает результат. Показатель прошедшего времени рядом — реальная стоимость одной проверки со стоимостью 12 на вашей машине.

FAQ#

Какую стоимость выбрать?#

12 — надёжный стандарт для новых систем сегодня: на типичном железе это занимает несколько сотен миллисекунд, что безболезненно для настоящего входа и мучительно для массового перебора. Поднимите до 13 или 14 для особо ценных целей, где слегка замедленный вход допустим. Ключевое правило — со временем подтягивать стоимость вверх по мере ускорения железа, потому что она масштабируется экспоненциально: каждое увеличение на 1 примерно удваивает время.

Почему хеширование одного и того же пароля дважды даёт разный результат?#

Потому что bcrypt каждый раз генерирует свежую случайную соль и встраивает её в выход. Два хеша выглядят совершенно по-разному, но оба проверяются одним и тем же паролем. В этом весь смысл соления — оно мешает атакующему узнавать повторяющиеся пароли или переиспользовать заранее вычисленную таблицу.

Можно ли проверить хеш, сгенерированный в другом месте?#

Да, если это корректная bcrypt-строка ($2a$, $2b$, $2x$ или $2y$). Вставьте её в поле существующего хеша в режиме проверки; инструмент считает стоимость и соль из самого хеша. Хеши, экспортированные из Node-модуля bcrypt, PHP password_hash или Python passlib, — все работают здесь.

bcrypt лучше SHA-256 для паролей?#

Для хранения паролей входа — да, и очень заметно. SHA-256 быстр, и это ровно то свойство, которое вредно для хранимого хеша пароля: атакующий с хешем может перебирать миллиарды вариантов в секунду на GPU. bcrypt намеренно медленный и солёный — именно этого и требует хранение паролей. SHA-256 — для целостности и подписей; bcrypt (или его родственники Argon2/scrypt) — для человеческих паролей.