bcrypt хеширование и проверка
КриптоХешируйте пароль с помощью bcrypt (адаптивная стоимость), или проверьте открытый текст по существующему хешу $2a$ / $2b$. Настраиваемая стоимость, калибровка времени — всё в вашем браузере.
Удалённые URL не запрашиваются; вставьте JSON напрямую.
⚠ Чем выше стоимость, тем медленнее и безопаснее
На этой странице
Что такое bcrypt?#
bcrypt — это функция хеширования паролей, специально построенная, чтобы быть медленной по замыслу. Если быстрый хеш вроде SHA-256 рассчитан на пропуск мегабайт в секунду, то bcrypt рассчитан на реальную стоимость одного предположения — чтобы атакующий, укравший базу хешей паролей, не мог дёшево перебрать миллиарды вариантов. Это стандартный ответ на вопрос «как хранить пароли пользователей»: хешируйте их через bcrypt, а не через обычный SHA-256.
Для этой задачи bcrypt подходит по двум причинам. Во-первых, у него настраиваемый фактор стоимости, масштабирующий работу экспоненциально — повышение стоимости на 1 примерно удваивает время одного хеширования, так что более быстрое железо можно обогнать, просто повернув «ручку». Во-вторых, он встраивает случайную соль в каждый хеш, поэтому одинаковые пароли хешируются в совершенно разные значения, а заранее вычисленная таблица для одной базы бесполезна против другой. И соль, и стоимость переносятся в самой выходной строке, поэтому для проверки нужен только пароль и хеш.
Страница делает обе операции: хеширует пароль в строку bcrypt и проверяет пароль по существующему хешу. Чтобы страница оставалась отзывчивой, хеширование со стоимостью 12 и выше уходит в Web Worker — тяжёлые вычисления не замораживают интерфейс.
Как пользоваться#
- Выберите режим: Хешировать (получить bcrypt-строку из пароля) или Проверить (сверить пароль с существующим хешем).
- Введите пароль. Нажмите значок глаза, чтобы показать его при вводе; по умолчанию он скрыт. Принимается UTF-8, включая эмодзи и нелатинские письменности.
- В режиме хеширования установите ползунок фактора стоимости (4–14, по умолчанию 12). Выше — медленнее и сильнее. При достаточной для заметного ожидания стоимости появляется предупреждение.
- В режиме проверки вставьте существующий хеш в появившееся поле. Стоимость считывается автоматически из самого хеша — задавать её не нужно.
- Нажмите главную кнопку. В режиме хеширования выход — 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) — для человеческих паролей.