PHP hash () возвращает пустую строку … иногда

У меня чрезвычайно раздражающие проблемы с функцией 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 ().

Спасибо.

1

Решение

Проблема не с 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])

2

Другие решения

Вы должны использовать password_hash () а также password_verify () для хеширования / проверки паролей.

Эти функции доступны в PHP> 5.5, но я не знаю причин, почему кто-то должен делать новый проект для более старой версии.

Некоторые моменты, почему вы должны использовать это:

  • Это легко использовать
  • Вы не заботитесь о соли
  • Это сделано для хэширования пароля (не как md5, sha * и т. Д.)
0

По вопросам рекламы [email protected]