Кто подскажет в чем проблема: Код (PHP): function GetRandomString($min, $max) { $dic = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'; $length = rand($min,$max); $string = ''; for($i = 0; $i < $length; $i++) { $string .= $dic[ rand(0, strlen($dic)-1) ]; } return $string; } function Encoding($str, $data = false) { if ($data) { return crypt($str, $data) == $data ? true : false; } else { return crypt($str, '$2y$07$' . GetRandomString(10,25)); } } $code = GetRandomString(10, 20); $hash = Encoding($code); $result = Encoding($code, $hash); var_dump($code, $hash, $result); на OpenServer $hash часто возвращает в виде "*0" (иногда нормальный хеш), без кавычек естественно, в IDE phpDesigner который использует версию php 5.4.15 все ок, правда периодически $result равно false, я вычитал если возвращает "*0" значит в качестве соли crypt были переданные не те символы, но я передаю те - 0-9A-Za-z, в чем проблема?
Дык тебя за ногу. Ну кто так генерирует случайные числа? Причем здесь опенсервер... в доках же написано что это исправление поведения blowfish... Обновись хотя бы до 5.5 что бы использовать password_hash Все что ниже 5.5 признано страшно дырявым По вопросу раз с не умеешь пользоваться даже гуглом =D http://stackoverflow.com/questions/25104132/php-blowfish-al ... -as-output
так этот crypt совсем дырявый? почитал http://habrahabr.ru/post/194972/ http://habrahabr.ru/post/184220/ вроде как password_hash это упрощенный вариант crypt, в частности не надо парится с солью, она делается автоматически. кстати проверку успешно проходят из crypt в password_verify, так и password_hash в crypt. Добавлено спустя 28 минут 41 секунду: и еще преимущество password_hash там надо выставлять параметр PASSWORD_DEFAULT и при появлении новых алгоритмов хеширования, от версии к версии этот PASSWORD_DEFAULT будет меняться (ну само значение внутри этой константы), что будет гарантировать использование всегда актуальных типов хеширования. как то так.
Шифрование сложная штука, очень просто выстрелить себе в ногу, лучше использовать password_hash (поищи реализацию для 5.4 если нужно) по возможности, у тебя какая задача?
Вот такие вот вещи напрягают сильно. Аккуратным надо быть. А то может статься, что внезапно вся база пользователей станет невалидной и никто не сможет залогиниться.
я тоже об этом подумал, но тут не так. Короче сама функция что то типа обертки, а дальше идет тип хеширования, когда ты пароль хешируешь то в него записывается тип хеширования, в частности как я понял ты можешь его узнать при помощи функции password_get_info, да и без него он пишет в начале, вот например - $2a$07$, 2a это тип, 07 это вычислительная мощь, что то такое, соответственно при проверке хешей при помощи password_verify даже если они были шифрованы старыми алгоритмами они будут нормально проверены, т.к. password_verify из самого хеша возьмет алгоритм и на его основе будет проверять. кстати я тестировал, хеши сделанные при помощи password_hash проходят проверку на crypt и в обратном направлении, из crypt в password_hash. Но мне почему что это так потому что под password_hash скрывается как раз crypt, в принципе это и на писано в описании статей.
ну главное что бы не получилось так, что в один прекрасный момент не будет проходить валидация в следствии того что, что-то там изменилось и придется как то восстанавливать пароль. Но вроде такого не должно быть т.к. я описал все выше.