Intereting Posts

`password_verify` вызов возвращает false для правильного пароля

У меня есть следующий фрагмент кода:

// bcrypt hash of 'password' $hash = '$2y$10$4u0cQ.WEnwHDo.C5Nl1vm.shKA0beQ32wqzphSfzklAq9OcDM2nLu'; if(password_verify('password', $hash)) { print_r('woohoo!'); } else { print_r('fubar'); } 

На одном сервере он работает нормально (woohoo!), А на другом он не работает. Я просто поместил его на codepad.org, и он тоже терпит неудачу.

Проблема заключается в том, что хэш, вычисленный с помощью crypt имеет длину 13 вместо требуемых 60.

Я использую библиотеку password_compat ircmaxel для github для реализации только функции password_verify для PHP 5.5.

Кажется, что вы запускаете скрипт на PHP-версии меньше 5.3.7, и поэтому алгоритм «2y» пока не известен.

Если возможно, я бы рассмотрел возможность обновления PHP на этом сервере, параметр «2y» решает проблему со строками ввода unicode.

Если это не вариант, вы можете заменить алгоритм в пакете совместимости. Где-то около строки 49 вы найдете …

 $hash_format = sprintf("$2y$%02d$", $cost); 

… изменить его на прежнюю константу BCrypt '2a' …

 $hash_format = sprintf("$2a$%02d$", $cost); 

… это, конечно, не оптимально, но это лучшее, что вы можете сделать в более ранних версиях.

Новый сгенерированный хеш-пароль теперь будет начинаться с '$2a$10$...' и проверка с помощью этого хэш-значения должна работать на каждой системе.