Хеши/крипто

Bcrypt Hash + Verify

Хеширование паролей через bcrypt (со случайной солью и настраиваемой стоимостью) и проверка пароля против имеющегося bcrypt-хеша.


                    

Bcrypt is a deliberately slow password-hashing algorithm: unlike MD5 or SHA-256, it intentionally requires heavy computation so that brute-forcing passwords stays impractical even if a database of hashes leaks.

How to use it

Common uses

Things to keep in mind

Pick a cost factor that keeps hashing around 100-300ms on your target server — a balance between security and login-time load.

Bcrypt truncates passwords longer than 72 bytes — characters beyond that limit are ignored by the algorithm.

Статья об этом инструменте: Bcrypt: почему пароли хешируют медленно, а не быстро

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

Зачем в bcrypt есть фактор "cost" (сложность)?

Фактор сложности определяет, сколько раз хеширование повторяется внутри алгоритма, поэтому с ростом значения хеширование становится экспоненциально медленнее. Это позволяет намеренно держать его достаточно медленным, чтобы противостоять перебору даже по мере роста мощности оборудования.

Почему хеш bcrypt всегда одинаковой длины независимо от пароля?

Bcrypt выдаёт хеш фиксированной длины (обычно 60 символов), который кодирует версию алгоритма, фактор сложности, соль и сам хеш вместе — длина не зависит от длины исходного пароля.

Нужно ли отдельное поле для соли в bcrypt?

Нет. Соль генерируется автоматически и встраивается прямо в строку результата, поэтому хранить или управлять ею отдельно не нужно — она включена всякий раз, когда вы проверяете пароль по хешу.

Есть ли ограничение на длину пароля в bcrypt?

Да, bcrypt обрабатывает только первые 72 байта пароля — всё, что длиннее, просто отбрасывается без предупреждения. На практике это редко проблема, но стоит помнить об этом ограничении при работе с очень длинными паролями или не-ASCII символами, где один символ может занимать несколько байт.

Почему bcrypt всё ещё рекомендуют, если есть Argon2?

Bcrypt десятилетиями проверен на практике, широко поддерживается во всех языках и фреймворках и остаётся вполне надёжным выбором. Argon2 рекомендуют как приоритетный для новых систем из-за защиты от атак на GPU/ASIC, но bcrypt не считается небезопасным — лишь менее устойчивым к специализированному оборудованию.

Статьи: Хеши/крипто

Hash Generator: чем MD5, SHA-1 и SHA-256 отличаются друг от друга

Почему MD5 до сих пор используют для проверки целостности файлов, но не для паролей.

Checksum Verifier: как проверить, что файл не повреждён

Почему совпадение контрольной суммы подтверждает целостность файла, но не то, кто его создал.

HMAC: чем хеш с ключом отличается от обычного хеша

Почему обычный SHA-256 не защищает от подделки сообщения, а HMAC — защищает.

UUID: как генерируют идентификаторы, которые почти никогда не повторяются

Почему UUID v4 можно генерировать независимо на миллионах машин без риска коллизий.

Генератор паролей: что на самом деле делает пароль устойчивым

Почему длинный пароль из словаря надёжнее короткого с символами и цифрами.

AES: как работает симметричное шифрование

Почему один и тот же ключ шифрует и расшифровывает данные в AES, и чем это отличается от асимметричного шифрования.

Argon2: почему этот алгоритм победил в конкурсе на хеширование паролей

Чем Argon2 лучше защищает от атак на видеокартах, чем более старые алгоритмы хеширования паролей.

Scrypt: зачем алгоритму нужно много памяти

Почему scrypt намеренно требует много памяти, чтобы усложнить перебор на ASIC-устройствах.

TOTP: как работают одноразовые коды в приложениях-аутентификаторах

Почему код в Google Authenticator работает без интернета и синхронизируется с сервером только по времени.

PBKDF2: самый старый стандарт растяжения ключей

Почему рекомендуемое количество итераций PBKDF2 растёт с каждым годом.

X.509: что внутри SSL-сертификата

Что именно браузер проверяет в сертификате сайта, прежде чем показать зелёный замочек.

PGP: как работает шифрование с открытым и приватным ключом

Почему можно свободно делиться публичным ключом PGP, но не приватным.