У меня чрезвычайно раздражающие проблемы с функцией php hash (). Для некоторых строк возвращаемый хеш — просто пустая строка, для других он работает нормально.
Я написал следующее:
$new_salted_pw = $salt.$pepper.$new_pw;
echo $new_salted_pw."... ";
$hash = hash("sha256", $new_salted_pw);
if($hash>120)
$hash = substr($hash, 120);
echo $hash;
Я использовал пароли geheim23
а также Geheim23
для тестирования, так что разница только в 1 символ.
Результат:
k0g3po32ggd0sv8oehgklbp2bd8eddxXMaxGTPJSQZSAJzgZSgaZxvUfGeheim23... d79e2044baa8a0a7363c88b4a2224277ac883eabc22cd28d61c1cdc31bb1c3fc
k0g3po32ggd0sv8oehgklbp2bd8eddxXMaxGTPJSQZSAJzgZSgaZxvUfgeheim23...
Нет хеша для второго. Оно пустое. Тот же код, без результата.
Еще интереснее хеширование geheim23
точно так же работает в другой части моего сценария без проблем.
И тогда я решил спросить Stackoverflow, знает ли он, почему PHP делает это со мной, как это исправить или какую функцию я могу использовать вместо hash ().
Спасибо.
Проблема не с hash()
функция! Проблема в substr()
функция. Вы должны изменить это:
(Здесь вы начали с позиции 120, но вы хотите строку формы от 0 до 120)
$hash = substr($hash, 120);
чтобы:
$hash = substr($hash,0, 120);
Также я думаю, что вы хотите проверить, если длина больше 120, а не если значение хеша больше 120, так что измените это:
if($hash>120)
к этому:
if(strlen($hash) > 120)
Для получения дополнительной информации о substr()
см. руководство: http://php.net/manual/en/function.substr.php
И цитата оттуда:
строка substr (строка $ string, int $ start [, int $ length])
Вы должны использовать password_hash () а также password_verify () для хеширования / проверки паролей.
Эти функции доступны в PHP> 5.5, но я не знаю причин, почему кто-то должен делать новый проект для более старой версии.
Некоторые моменты, почему вы должны использовать это: