Путаница с md5 и sha1 в PHP - Почему я получаю разные результаты шифрования? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть функция php на странице php, называемая encrypt_password, которую я использую при обработке формы регистрации:

function encrypt_password($password){

    $salt  = sha1(md5($password));
    $password = md5($password.$salt);

    return $password;
}

Я пытаюсь использовать его снова, когда обрабатываю форму входа, но получаю другой результат.

Я получаю правильный результат, просто не вызывая эту функцию, а просто вызывая:

$salt  = sha1(md5($password));
$password = md5($password.$salt);

прямо на моей странице process_login. Зачем мне получать другой результат, вызывая encrypt_password?

Надеюсь, я объяснил это достаточно ясно! Спасибо!

Ответы [ 3 ]

0 голосов
/ 17 ноября 2011

Я просто не могу поверить, что это правда.Вы говорите, что у вас есть две страницы, одна с регистрационной формой и одна с регистрационной формой.

Они обе должны зашифровать пароль, который отправил пользователь.

Здесь может быть что-то не так, в зависимости от того, как вы обнаружите, что они не совпадают.Вы просто пытаетесь войти в систему и видите ошибку, что ваш пароль неверный?Или вы повторили хэш пароля после звонка на encrypt_password?Было бы неплохо сделать это, чтобы показать нам хэш пароля «test», как со страницы регистрации, так и со страницы входа в систему.Возможно, кто-то мог видеть шаблон.

В любом случае, позвольте мне угадать:

  1. Вы неверно вводите пароль.
  2. Вы создали этого пользователя, которого выпротестировать его с более старой версией вашей функции шифрования.Возможно, вы использовали md5(password) для регистрации, затем вы прочитали где-то небезопасное и добавили соль.Теперь вы сравниваете два разных хеша для одного и того же пароля, поскольку пароль хранится в базе данных с использованием старой функции хеширования.
  3. Вы установили $password с $password = $_POST['password']; Я думаю.Наверное, на обеих страницах.Эти заявления на обеих страницах не содержат опечаток?Нет $password = $_POST['pasword']; там?И оба элемента <input> с именем "password"?
  4. Опечатки также относятся к функции $ encrypt_password.Вы определяете это на обеих страницах, или вы включаете его из другого файла?(Вы должны!) Если они существуют в обоих файлах, совпадают ли они по буквам?Скопируйте его, чтобы проверить это, и если это сработает, поблагодарите меня и добавьте его во включенный файл, и пусть это будет урок.
0 голосов
/ 29 октября 2013

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

.
0 голосов
/ 17 ноября 2011

Да, я проверил код, и нет ошибки. Это мой код без каких-либо недостатков:

 function encrypt_password($password){
        $salt  = sha1(md5($password));
        $password = md5($password.$salt);
        return $password;
}

$myPassword = "test";
echo encrypt_password($myPassword );
// this gives me 34364c859afb02e70306c905374ac2d5

$salt  = sha1(md5($myPassword));
$password = md5($myPassword.$salt);
echo "<br />";

echo $password;
//this gives me 34364c859afb02e70306c905374ac2d5

Итак, они одинаковы. Как и Димм, я тоже думал об именах переменных. Но я не мог повторить это. К сожалению ...

...