Я использую bcrypt
локально, поскольку xampp имеет PHP 5.3, но онлайн-учетная запись моего хостинга имеет только PHP 5.2. Есть ли хорошая альтернатива, которую я могу использовать, которая работает для 5.2?
Я думаю, что я должен обновить и улучшить этот ответ, потому что в последние годы я много узнал о хэшировании паролей.
PHP версия 5.5 предоставит удобный способ использования BCrypt, для PHP версии 5.3.7 и выше существует пакет совместимости. Пожалуйста, взгляните на этот ответ .
Для версий PHP до 5.3 рекомендуется использовать библиотеку phpass , они поддерживают PHP до версии 3.
Я использую bcrypt … Есть ли хорошая альтернатива, которую я могу использовать, которая работает для 5.2?
См. Инфраструктуру хэширования PHP в Openwall (PHPass). Он переносится и затвердевает от ряда распространенных атак на пароли пользователей. Парень, который написал фреймворк (SolarDesigner), тот же парень, который написал John The Ripper и сидит в качестве судьи в конкурсе Hays Hash. Поэтому он знает кое-что об атаках на пароли.
Проверьте расширение Mcrypt PHP. Он существует уже давно и имеет несколько разных алгоритмов. bcrypt
кажется просто оболочкой Blowfish. Вы можете так же легко использовать функцию crypt () PHP и передать соответствующую соль, чтобы заставить функцию использовать Blowfish:
// crypt($plaintext, $salt); // How you define $salt determines the encryption algorithm used $hash = crypt('PASSWORD', '$2a$12$Some22CharacterSaltXXO'); echo $hash; // Output would be $2a$12$Some22CharacterSaltXXO6NC3ydPIrirIzk1NdnTz0L/aCaHnlBa
На странице руководства PHP (см. Выше) объясняется, почему соль для пароля выглядит так, как в моем примере выше. $2a$
говорит PHP использовать Blowfish, 12$
– модификатор стоимости; число между 04 (да, оно должно быть 2 цифры) и 31, что (я считаю) влияет на количество итераций, используемых механизмом хэширования. Как вы можете видеть, соль включена в выход из вызова в crypt()
, поэтому, когда вам нужно что-то проверить против хеша, вам нужно сначала извлечь хэш (из файла или базы данных, где он хранится), чтобы вытащить соль.
Это зависит от того, где и для чего вы храните свои пароли.
Для онлайн-сайта (с пользователями и т. Д. +) Я бы сделал следующее:
$ hash = "jr38028 (/ # Fjg4i4g438h9) (# Hhhf3, ..; uh # F) 8"; $ hashed = sha1 ($ hash. $ PASSWORD. $ hash); // где $ PASSWORD – это переменная, содержащая пароль. echo $ hashed; // показывает хешированный пароль.
Отредактировано, сделав что-то не так. Забыл внутрь функции hash, также изменен на sha1 вместо md5. И ненавистники, любите вас тоже <3