Меняющийся MD5

Randell

Новичок
Меняющийся MD5

Добрый день! Ребята, я в отчаянии. На нескольких сайтах всегда успешно делал форму входа пользователя, записывая в кукисы 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 
{
   //Работаем, вход подтвержден
}
Функция входа: (build_ulform() просто строит форму)
Код:
$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);
}
Так вот, этот самый md5($_POST['upass']) выдает...разные варианты каждые сутки. Глупо, но я не знаю в чем дело.
Конкретно, есть пароль 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]'");
Потому что хеш, генерируемый после нажатия юзером кнопки "войти", ни фига не соответствует тому что забит в базе.

Хоть стой, хоть плач.
 

Randell

Новичок
2 дня уже убил, не могу понять - код элементарен как 5 копеек, а не работает. На других сайтах (и хостингах) все ок.
 

SiMM

Новичок
> 2 дня уже убил
Что из сказанного в FAQ было сделано за эти два дня?

> На других сайтах (и хостингах) все ок.
Эта фраза вообще никому не интересна.
 

Randell

Новичок
Ребят, я очень признателен вам просто за то, что вы не поленились хоть как-то постараться помочь, но пожалуйста, прочитайте внимательнее о чем я писал. Проще код придумать нельзя, ошибок никаких нет, так как форма работает ровно один день, и потом перестает. Почему меняется MD5, почему md5('$_POST') перестает совпадать с забитым в базе на следующий день - я не понимаю, и пытаюсь спросить у вас.

Строка в базе не меняется.
 

Randell

Новичок
Ребят, да - я не совсем прав, простите. Из 10 логинов перестают работать на следующий день двое:
elena:wsusoifd*33
myd:jdKLDSJdmd

Остальные работают стабильно. Какой-либо существенной разницы между ними и работающими я не вижу.

-~{}~ 31.03.09 12:19:

cDLEON согласись, логично, что код я упрощу до минимума прежде чем запощу сюда, и обработка данных из формы здесь совершенно не важна.

У меня стойкое ощущение непонимания. Простите, что я к вам влез?
 

cDLEON

Онанист РНРСlub
Елена кто по знаку задиака?
Наверняка ведь Весы!!!!!!!!!!!!
 

Фанат

oncle terrible
Команда форума
Randell
а почему бы тебе самому не читать то, что тебе пишут?
 

Randell

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

Ребята, я прекрасно знаю, что такое дебаг, и прежде, чем написать вам, разбирался сам. Если свести суть, то:

[/b]
<input type="password" size="10" name="upass">
Вбивается wsusoifd*33
Почему вчера md5($_POST['upass']) было равно
9eebd6d760770341ce72baf3c9cc219c
А сегодня уже 80fa0fe7be6df5b31b0ecc04cd5d00cc

Наверное, мне сразу надо было так спросить)
 

cDLEON

Онанист РНРСlub
Т.е. вот такой вот файл:
PHP:
<form>
<input type="text" name="upass"/>
<input type="submit" value="отправить"/>
</form>
<?if ($_SERVER['REQUEST_METHOD']=="POST") {
 var_dump(strlen($_POST['upass']),$_POST['upass'],md5($_POST['upass']));
}
Будет каждый день выдавать разные данные?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Randell
Почему вчера md5($_POST['upass']) было равно
9eebd6d760770341ce72baf3c9cc219c
А сегодня уже 80fa0fe7be6df5b31b0ecc04cd5d00cc

Потому что вчера пароль вбивался руками, а сегодня его откуда-то скопипастили, и к нему прилип пробел / табуляция / перевод строки. А так как пароль закрывается звёздочками, то сразу этого не видно, а читать статью про отладку слишком лениво.
 

SiMM

Новичок
> Ребята, я прекрасно знаю, что такое дебаг
Интересно, почему человек, прекрасно знающий, что такое дебаг, смотрит на результат функции и всячески игнорирует аргумент?
 

Фанат

oncle terrible
Команда форума
Ребята, я прекрасно знаю, что такое дебаг,
да-да.
тут таких знатоков прекрасных сотня бегает.
Вбивается wsusoifd*33
md5($_POST['upass']) равно
9eebd6d760770341ce72baf3c9cc219c
а между вбивается и мд5 ничего не происходит, ага
 

zerkms

TDD infected
Команда форума
SiMM
[irony]ну а с чего бы ему измениться?[/irony]
 

Фанат

oncle terrible
Команда форума
пилотка, как всегда, с самым актуальным комментарием
 

Randell

Новичок
cDLEON не совсем. По моим наблюдениям он выдает из одного пароля (wsusoifd*33) два разных хеша каждый день. Т.е. из двух кешей сегодня показывает один, а завтра второй. А послезавтра первый.

Sad Spirit к сожалению нет. Мне звонят и жалуются, что форма не работает, я копирую пароль из файлика, где он записан. И без пробелов. Кроме того, онлайн калькуляторы MD5 выдают с подставленными в начало или конец пробелами другие хеши.

SiMM аргумент постоянен...

-~{}~ 31.03.09 12:43:

pilot911 да, лучше делать сессию с подтверждением входа, но это не так существенно.

-~{}~ 31.03.09 12:45:

***** пожалуйста, умерьте свою иронию. Куда эффективнее ткнуть в ошибку, если вы ее видите, это гораздо профессиональнее и вежливее.
 
Сверху