Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблемы со сравнением хеша!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Sha1
UNTRUSTED
Отправлено: 05 Апреля, 2012 - 12:16:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Не пойму почему, раньше вроде все ок работало, сейчас наблюдаются странные вещи, если хеш делать только из латинских символов и цифр, то нормально два сравнивает.. Если же там присутствуют какие-то символы вроде (!"№;%:?*()<>?]|[':;") тогда при сравнении пишет что не равны, в чем может быть трабл?
Вот пример для наглядности:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  function pw()
  3.  {
  4.    $arr = array('a','b','c','d','e','f','7','8','9','0','.',',','(',')','[',']','!','?','&','^','%','@','*','$','/','|','+','-','`','~');
  5.    $ps = "";
  6.    for($i = 0; $i < 15; $i++)
  7.    {
  8.      $index = rand(0, count($arr) - 1);
  9.      $ps .= $arr[$index];
  10.    }
  11.    return $ps;
  12.  }
  13.          $pass = pw();
  14.          $newpass = sha1($pass);
  15. //далее он записывается в базу и потом если сравнить $newpass с тем что в базе, они не равны...
  16. //Но вот если в массиве только букви и цифры то норм!!!
  17. ?>
 
 Top
EuGen Администратор
Отправлено: 05 Апреля, 2012 - 12:22:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




UNTRUSTED
Покажите как и где сравниваете.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
UNTRUSTED
Отправлено: 05 Апреля, 2012 - 12:33:13
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




Еще забыл, пароль в функции не так хешируется
UNTRUSTED пишет:
$newpass = sha1($pass);

а так
CODE (htmlphp):
скопировать код в буфер обмена
  1. $newpass = sha1($pass,1);//Хотя на самом деле не так:) но так пробовал тоже неробит

Вот так сравнивается!
CODE (htmlphp):
скопировать код в буфер обмена
  1.  $sql = mysql_fetch_row(mysql_query("SELECT `pass` FROM `users` WHERE login = '$login'));
  2. $newpass = sha1($sql[0],1);
  3.            var_dump($newpass);
  4.            var_dump($sql[0]);
  5.            var_dump(strcmp($newpass,$sql[0]));

Первые два var_dump чаще всего различаються всего одним символом, не пойму почему? Именно только один символ!
(Добавление)
string(20) "N�ZIC&lc�� �&ѭK�>"
string(20) "[4G2ᥴ?�����C�faÚ"
int(-1)
Вот последний раз вывод! Вообще разный
(Добавление)
Тут дело точно именно в символах, которые хешируются, так как если только англ. и цифры, то все проходит в ноль!
 
 Top
EuGen Администратор
Отправлено: 05 Апреля, 2012 - 12:52:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




UNTRUSTED
Значит Вы сравниваете не то, ищите проблему в логике.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
UNTRUSTED
Отправлено: 05 Апреля, 2012 - 12:56:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




EuGen пишет:
UNTRUSTED
Значит Вы сравниваете не то, ищите проблему в логике.

А почему тогда
UNTRUSTED пишет:
если хеш делать только из латинских символов и цифр, то нормально два сравнивает

??
(Добавление)
Вот смотрите полностью!
CODE (htmlphp):
скопировать код в буфер обмена
  1. ###Функция генерит пароль
  2. function pw(){
  3. $arr = array('a','b','c','d','e','f','7','8','9','0','.',',','(',')','[',']','!','?','&','^','%','@','*','$','/','|','+','-','`','~');
  4.     $ps = "";
  5.     for($i = 0; $i < 15; $i++){
  6.      $index = rand(0, count($arr) - 1);
  7.      $ps .= $arr[$index];
  8.    }
  9.    return $ps;
  10. }
  11. ###Функция хешит пароль
  12. function passx($pass){
  13.  $passhide = sha1($pass,1);
  14.  return $passhide;
  15. }
  16. ###Один скрипт
  17. $pass = pw();//его отправляем по емаил
  18. $newpass = passx($pass); // а этот в базу записываем
  19. ###В другом скрипте
  20. $sql = mysql_fetch_row(mysql_query("SELECT `pass` FROM `users` WHERE login = '$login'));
  21. $pass = POST[pass]
  22. $newpass = passx($pass);
  23.            var_dump($newpass);
  24.            var_dump($sql[0]);
  25.            var_dump(strcmp($newpass,$sql[0]));

Что то вот так!
(Добавление)
ААААААА ВОТ Я ДЕБИЛУлыбка))))) Помираю со смеху! Помираю со смеху!
СмотритеУлыбка
CODE (htmlphp):
скопировать код в буфер обмена
  1. $pass = trim(htmlspecialchars($_POST['pass'],ENT_QUOTES));

Теперь все стало понятно, я такой censored !
EuGen пишет:
ищите проблему в логике.

Спасибо огромноеУлыбка Здорово
 
 Top
OrmaJever Модератор
Отправлено: 05 Апреля, 2012 - 13:10:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




http://www.phpfaq[dot]ru/debug/
(Добавление)
UNTRUSTED пишет:
ААААААА ВОТ Я ДЕБИЛ)))))



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
UNTRUSTED
Отправлено: 05 Апреля, 2012 - 13:26:13
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




OrmaJever пишет:
http://www.phpfaq.ru/debug/

А это здесь причем? Я этот сайт уже перечитывал.. Тут видите, запарился что на все переменные, specialchars(а первоначвально пароль вообще не мог иметь спецсимволов), а как я разрешил спец символы а это и не подумал убрать, вот отсюда вся и проблема.
 
 Top
OrmaJever Модератор
Отправлено: 05 Апреля, 2012 - 13:35:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




UNTRUSTED Вы выложили 13 строк кода, а ошибка всего в одной, поэтому нужно было методом дебага отсечь всё лишнее и увить в какой имено строчке ошибка, если это глупая ошибка вы её исправляете сами, если вы не можите понять почем эта строчка работает так то пишите сюда.
Мне бы очень хотелось увидет ьна этом форуме все темы так оформленые, но на практике человек выкладывает код из N строк и мы должны ему указать на ошибку, а как по вашему мы это делаем? Ну если ошибка сразу кидается в глаза то это хорошо, но иногда надо запустить код у себя и дебажить таким же способом пока не придёшь к той строке с ошибкой. Просто мы это понимаем и делаем, а многие думают "да это не относится к моей проблеме" или "ой не умею я дебажить, дебаг это не моё". И в итоге никто им помогать не будет.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
UNTRUSTED
Отправлено: 05 Апреля, 2012 - 14:03:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Март 2012  


Помог: 2 раз(а)




OrmaJever, Спасибо, учту!
(Добавление)
UNTRUSTED пишет:
$pass = trim(htmlspecialchars($_POST['pass'],ENT_QUOTES));

Кстати, не из-за этого нифига Нахмурился
(Добавление)
Я сейчас даже не могу сказать из-за чего это было но я откатил назад, добавлял добавлял все постепенно.. И вуаля - работает! Хм
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB