2013-11-08 2 views
6

Я пытаюсь использовать новую функцию из PHP 5.5 с именем password_hash().php password_hash и password_verify issues no match

Независимо от того, что я делаю, $ hash и $ password не совпадают.

$password = "test"; 

$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e"; 



if (password_verify($password, $hash)) { 
    echo "Success"; 
} 
else { 
    echo "Error"; 
} 
+0

Получаете ли вы сообщения об ошибках, уведомления или предупреждения? Каков выходной сигнал переменных, если вы их эхо отзываете напрямую? – mtaanquist

+0

password_verify() возвращает 1 – Daniel

+0

Возможно, ваша переменная $ hash находится в другом файле. –

ответ

33

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

При назначении:

$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e"; 

Это делает PHP думаю, у вас есть переменная $2y и еще один под названием $10 и, наконец, третья называется $fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e. Это, очевидно, не так.

я заметил при включении отчетов об ошибках, что ошибка:

Notice: Undefined variable: fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e

был быть брошен PHP.

Заменить все ваши двойные кавычки с помощью одиночных кавычек для исправления.

например

$hash = '$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e'; 

Лакомства весь хэш как буквенная строка вместо строки со встроенными переменными.

+3

хе-хе ... я люблю это .. я это знал .. человек .. ты спас мне голову, и мне нравится, как иногда бывает так иронично. Большое спасибо и луки от меня .. я вообще так думаю. :) – Daniel

4

Работы хорошо для меня.

<?php 

$hash=password_hash("rasmuslerdorf", PASSWORD_DEFAULT); 
if (password_verify('rasmuslerdorf', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?> 

ВЫВОД:

Password is valid!

+1

Попробуйте сохранить пароль, а затем подтвердите его. То, что вы только что сделали, работает, но это не то, что можно использовать. Это просто пример. Пароли необходимо хранить в базе данных, а затем проверять. – Daniel

+0

Как вы извлекаете пароль из db и сравниваете вопросы .. Вы должны опубликовать этот код. –

+0

См. Мой вопрос еще раз. Я сделал еще один пример, чтобы упростить этот вопрос. – Daniel

6

У меня была аналогичная проблема с password_verify() .. Ошибка в моем случае, это было то, что я объявил мое поле пароля в базе данных как varchar (30), но хэш равен или длиннее до 60 символов. .

+2

Я где-то читал, что они рекомендуют длину поля базы данных 255 символов для будущей проверки. – docesam

+1

@docesam Я где-то читал, что поле базы данных для паролей должно быть ТЕКСТ для будущей проверки. – bart

 Смежные вопросы

  • Нет связанных вопросов^_^