Randell
Новичок
Меняющийся MD5
Добрый день! Ребята, я в отчаянии. На нескольких сайтах всегда успешно делал форму входа пользователя, записывая в кукисы MD5 хеш пароля, и сравнивая его с точно таким же хешем в базе.
Но в последнем проекте я столкнулся с совершенно необъяснимой вещью - форма входа работает сутки, максимум - двое. После этого MD5 вводимого пароля перестает совпадать с забитым в базу! Он другой. Глупо звучит, да? Вот код:
Проверяем, есть ли кукис, совпадает ли он с тем что в базе:
Функция входа: (build_ulform() просто строит форму)
Так вот, этот самый md5($_POST['upass']) выдает...разные варианты каждые сутки. Глупо, но я не знаю в чем дело.
Конкретно, есть пароль wsusoifd*33. Его хеш может быть двух видов:
9eebd6d760770341ce72baf3c9cc219c
80fa0fe7be6df5b31b0ecc04cd5d00cc
База:
Я все перерыл, но нигде ничего похожего не нашел. Я не знаю, что мне уже делать - мне приходится каждый день сбрасывать юзеру пароль - кстати, с помощью специальной формы администратора
Потому что хеш, генерируемый после нажатия юзером кнопки "войти", ни фига не соответствует тому что забит в базе.
Хоть стой, хоть плач.
Добрый день! Ребята, я в отчаянии. На нескольких сайтах всегда успешно делал форму входа пользователя, записывая в кукисы MD5 хеш пароля, и сравнивая его с точно таким же хешем в базе.
Но в последнем проекте я столкнулся с совершенно необъяснимой вещью - форма входа работает сутки, максимум - двое. После этого MD5 вводимого пароля перестает совпадать с забитым в базу! Он другой. Глупо звучит, да? Вот код:
Проверяем, есть ли кукис, совпадает ли он с тем что в базе:
Код:
$dologin=false;
if ((isset($_COOKIE["ulogin"])) && (isset($_COOKIE["upass"]))) {
$result=mysql_query("SELECT * from users WHERE login='$_COOKIE[ulogin]' and pass='$_COOKIE[upass]'");
if (@mysql_num_rows($result)!=0) {
$dologin=true;
while ($arr=mysql_fetch_array($result))
{
$myid=$arr['id'];
}
}
}
if (!$dologin) {
build_ulogin();
}
else
{
//Работаем, вход подтвержден
}
Код:
$enter="usual";
if($_POST['ulogin'])
{
$result=mysql_query("SELECT pass from users WHERE login='$_POST[ulogin]'");
if (@mysql_num_rows($result)==0) $enter="no";
else
{
while ($arr=mysql_fetch_array($result))
{
if($arr['pass']!=md5($_POST['upass'])) $enter="no";
else {
setcookie("ulogin", $_POST['ulogin'],0);
setcookie("upass", md5($_POST['upass']),0);
echo "<script>document.location.href='?';</script>";
}
}
}
}
if ($enter=="no") build_ulform(1);
if ($enter=="usual") build_ulform(0);
}
Конкретно, есть пароль wsusoifd*33. Его хеш может быть двух видов:
9eebd6d760770341ce72baf3c9cc219c
80fa0fe7be6df5b31b0ecc04cd5d00cc
База:
Код:
CREATE TABLE IF NOT EXISTS `users` (
`id` mediumint(5) NOT NULL auto_increment,
`login` varchar(40) NOT NULL,
`pass` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
)
Я все перерыл, но нигде ничего похожего не нашел. Я не знаю, что мне уже делать - мне приходится каждый день сбрасывать юзеру пароль - кстати, с помощью специальной формы администратора
Код:
mysql_query("UPDATE $table SET login='$_POST[login]', pass='".md5($_POST['pass'])."' where id='$_GET[id]'");
Хоть стой, хоть плач.