эквивалент password_hash для php 5.4?

Я разработал свой сайт с помощью XAMPP с установленным php 5.5. Я просто понимаю, что мой хост имеет только php 5.4 (пока не обновляется до 5.5). Моя проблема в том, что я не могу использовать новую функцию php 5.5 password_hash() . Существует ли эквивалентный метод для хеширования с солью для php 5.4?

Есть ли способ получить этот эквивалентный код (ниже) для работы в php 5.4?

 $options = [ 'salt' => uniqid(mt_rand(), true), 'cost' => 12 ]; $hash = password_hash($mypassword, PASSWORD_DEFAULT, $options); 

Solutions Collecting From Web of "эквивалент password_hash для php 5.4?"

Используйте password_compat . Это обратная совместимая библиотека для эмуляции password_hash() в старых версиях PHP (5.3.7+).

Когда я использовал PHP 5.4, я использовал функцию криптографии php с хэш-типом CRYPT_BLOWFISH. Я немного поиграл с параметрами, чтобы соответствовать вашему делу, и пришел к выводу, что ваш blowfish Pre должен быть $2y$12$ чтобы соответствовать вашему параметру cost = 12 .

Вы можете запустить этот скрипт в командной строке, чтобы проверить соответствие результатов ( я сохраню вашу небезопасную соль mt_rand в этой части. Подробнее об этом позже )

 <?php $salt= uniqid(mt_rand(), true); $options=['salt'=>$salt, 'cost'=>12]; $mypassword=$argv[1]; $cryptpwd=crypt($mypassword,'$2y$12$'.$salt.'$'); // PHP 5.4 style $pwdhash=password_hash($mypassword, PASSWORD_DEFAULT, $options); // PHP 5.5+ echo "\n"; echo 'CRYPT :'. $cryptpwd; echo "\n"; echo 'PWD HASH :'. $pwdhash; echo "\n"; if($cryptpwd===$pwdhash) { echo 'Hashes match!'; } else { echo 'Hashes do not match'; } echo "\n"; 

Например

 php pwd.php 1q2w3e4r5t 

выходы

 CRYPT :$2y$12$22253563353f27f9b3292ereZv98r1iFQhItfYT0UbKaejMSJThBi PWD HASH :$2y$12$22253563353f27f9b3292ereZv98r1iFQhItfYT0UbKaejMSJThBi Hashes match! 

@ Ответ JohnConde лучше, потому что безопаснее использовать хорошо протестированную библиотеку. Я просто хотел посмотреть, что идет ниже ствола.

PD: Вы спросили

Есть ли способ получить этот эквивалентный код (ниже) для работы в php 5.4?

Теперь ваш код имеет серьезную слабость . Вы генерируете соли с mt_rand. Никогда не делай этого . Доверяйте системе с генерированием соли и, если вы действительно хотите ее создать, используйте что-то вроде следующего солевого генератора (я использовал это, когда мои приложения были PHP 5.4)

 $Allowed_Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./'; $Chars_Len = 63; $Salt_Length = 21; $salt = ""; $Blowfish_Pre='$2y$12$'; $Blowfish_End='$'; for ($i = 0; $i < $Salt_Length; $i++) { $salt.= $Allowed_Chars[mt_rand(0, $Chars_Len) ]; } $bcrypt_salt = $Blowfish_Pre . $salt . $Blowfish_End; 

Честно говоря, я был уверен, что соль имеет 18 символов, но, глядя на мой старый код, это делается с 21 🙂