Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Dziwny problem z hash()
neosatan
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 2
Dołączył: 29.04.2009
Skąd: wrocław

Ostrzeżenie: (0%)
-----


Hejka,
Mam ciekawy problem z funkcją hashującą w php.
  1. private function hash($username, $salt, $password)
  2. {
  3. return hash('sha512', $salt.$username.$password);
  4. }
  5. function checkValidUsernamePassword($username, $password)
  6. {
  7. $this->startDatabase();
  8. $sql = "select nazwa, salt, hash from users where nazwa ='$username' limit 1";
  9. $result = mysql_query($sql);
  10. if(mysql_num_rows($result) == 1)
  11. {
  12. $record = mysql_fetch_assoc($result);
  13. $hash = $this->hash($username, $record['salt'], $password);
  14. echo $hash.'<br/>';
  15. echo $record['hash'].'<br/>';
  16. echo strlen($hash).'<br/>';
  17. echo strlen($record['hash']);
  18. if($hash == $record['hash'])
  19. return true;
  20. else
  21. return false;
  22. }
  23. else
  24. return false;
  25.  
  26. }

i output
  1. 678e3130227fedc39757785a044202fc6c6c072f46c98c37b4c628da7b98c092674a534ff1c49909
    c6800265705ee098b9e38f30198dba6e0ad8b0113d8d0ba0
  2. 734a8cb77a6f469e933857637600e29749d4be75112711f89d78b3bf462f7b664b7b1bef511370c8
    79c84145bb2795d6da4810de5de852ccdc6456753de127ad
  3. 128
  4. 128


jak można się szybko domyślić hash się nie pokrywa, a co za tym idzie nie mogę przeprowadzić autoryzacji użytkownika.
Pierwszy raz spotkałem się z czymś takim. Jak ktoś może mi podsunąć pomysł jaki jest powód różnego hashowania tych samych stringów (lub może gdzieś po drodze stringi są zmieniane, a ja nie wiem o tym :?), to będę bardzo szczęśliwy.


--------------------
C/C++ (ucze się...), PHP (ucze się...), SMARTY(ucze się...), PYTHON(ucze się...), C#(uczę się...), PERL(uczę się...), JavaScript(uczę się...), JAVA(będą mi kazali się uczyć...)... Ja się głównie uczę...
Go to the top of the page
+Quote Post
jang
post
Post #2





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


nie wiem jak Twoje ale moje PHP pokazuje w takich wypadkach :
  1. function hash($username, $salt, $password)
  2. {
  3.  
  4. }

Fatal error: Cannot redeclare hash() in /test.php on line 4


--------------------
$email = filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if($email === false) {
// Houston, we have a problem....
}
Go to the top of the page
+Quote Post
neosatan
post
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 2
Dołączył: 29.04.2009
Skąd: wrocław

Ostrzeżenie: (0%)
-----


bo ta funkcja jest częścią większej klasy, ale reszta klasy jest nieistotna, wykonuje po prostu inne zadania.


--------------------
C/C++ (ucze się...), PHP (ucze się...), SMARTY(ucze się...), PYTHON(ucze się...), C#(uczę się...), PERL(uczę się...), JavaScript(uczę się...), JAVA(będą mi kazali się uczyć...)... Ja się głównie uczę...
Go to the top of the page
+Quote Post
jang
post
Post #4





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

Ostrzeżenie: (0%)
-----


Cytat(neosatan @ 14.04.2011, 22:40:27 ) *
bo ta funkcja jest częścią większej klasy, ale reszta klasy jest nieistotna, wykonuje po prostu inne zadania.

a co ma piernik do wiatraka ?
1. skoro w klasie to metoda a nie funkcja
2. http://pl.php.net/manual/pl/functions.user-defined.php :
PHP nie umożliwia przeładowywania funkcji, nie jest też możliwe usunięcie jej definicji lub redefiniowanie poprzednio określonych funkcji.
więc skoro w PHP istnieje funkcja hash() to metoda nie ma prawa się tak nazywać -> Cannot redeclare hash()


--------------------
$email = filter_var(filter_var($email, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if($email === false) {
// Houston, we have a problem....
}
Go to the top of the page
+Quote Post
Bags_Bunny
post
Post #5





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


@neosatan: nie pokazałeś nam w jaki sposób wygenerowałeś hash, który jest w bazie. Może jest inaczej posolony?

Cytat(jang @ 14.04.2011, 22:53:07 ) *
1. skoro w klasie to metoda a nie funkcja

Owszem, w ogólnej nomenklaturze. PHP jednak, jak zresztą widać przy deklaracji, określa to też mianem funkcji.

Cytat(jang @ 14.04.2011, 22:53:07 ) *
więc skoro w PHP istnieje funkcja hash() to metoda nie ma prawa się tak nazywać -> Cannot redeclare hash()

Co palisz? Też to chcę.

-- edycja --
Zmieniłem zdanie. Nie chcę tego towaru. Miałbym koszmary...

Ten post edytował Bags_Bunny 14.04.2011, 23:36:17


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
neosatan
post
Post #6





Grupa: Zarejestrowani
Postów: 79
Pomógł: 2
Dołączył: 29.04.2009
Skąd: wrocław

Ostrzeżenie: (0%)
-----


@jang. Napisz sobie na spokojnie taka klasę, odpal, później się zastanów co napisałeś.
@Bags_Bunny. Faktycznie. Kod jest poniżej.
  1. function addUser($username, $password)
  2. {
  3. $this->startDatabase();
  4. if($this->checkUsername($username))
  5. {
  6. $salt = $this->generateSalt();
  7. $hash = $this->hash($username, $salt, $password);
  8. echo $hash.'<br/>';
  9. $sql = "call add_user('$username', '$hash', '$salt')";
  10. mysql_query($sql);
  11. return true;
  12. }
  13. else
  14. return false;
  15. }


Co ciekawe, z śledzenia stringów w każdej fazie wynika z tego, że z tych samych danych mogą powstać dwa inne hashe przy użyciu sha512. Może jest jakiś bug z tym związany?


--------------------
C/C++ (ucze się...), PHP (ucze się...), SMARTY(ucze się...), PYTHON(ucze się...), C#(uczę się...), PERL(uczę się...), JavaScript(uczę się...), JAVA(będą mi kazali się uczyć...)... Ja się głównie uczę...
Go to the top of the page
+Quote Post
auto-all
post
Post #7





Grupa: Zarejestrowani
Postów: 49
Pomógł: 7
Dołączył: 2.04.2011
Skąd: Wawa

Ostrzeżenie: (0%)
-----


Zrób tak:
  1. // Poniższą linię zamień
  2. return hash('sha512', $salt.$username.$password);
  3. // na
  4. return $salt.$username.$password;
  5. // Zobczysz string z którego generujesz hash
możne dane się różnią jakimś drobnym szczegółem
Go to the top of the page
+Quote Post
ylk
post
Post #8





Grupa: Zarejestrowani
Postów: 194
Pomógł: 26
Dołączył: 9.01.2011
Skąd: /dev/null

Ostrzeżenie: (0%)
-----


Cytat(jang @ 14.04.2011, 23:53:07 ) *
a co ma piernik do wiatraka ?
skoro w PHP istnieje funkcja hash() to metoda nie ma prawa się tak nazywać -> Cannot redeclare hash()

Ojj ale wpadka... może na drugi raz sprawdź, zanim napiszesz taką głupotę? Przecież sam napisałeś, że metoda to nie funkcja <lol>

Ten post edytował ylk 15.04.2011, 11:39:31
Go to the top of the page
+Quote Post
neosatan
post
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 2
Dołączył: 29.04.2009
Skąd: wrocław

Ostrzeżenie: (0%)
-----


Prześledziłem zmianę łańcuchów znaków, ale jak wchodzą do metody hash są identyczne (w przypadku logowania i rejestracji). Sprawdziłem też czy pod funkcjami md5() i sh1() (właściwie nie wiem po co, bo przecież to są aliasy do hash('md5', $string), hash('sha1', $string)), oraz innymi algorytmami hashowania też tak się dziej. Niestety dzieje się to samo, więc to musi być jakiś błąd w kodzie, lub istnieje jakieś przekodowanie w znakach, o którym nie wiem. Powiem, że serwer działa na windowsie i na platformie XAMPP. Nie znam żadnych bugów, które by to powodowały.


--------------------
C/C++ (ucze się...), PHP (ucze się...), SMARTY(ucze się...), PYTHON(ucze się...), C#(uczę się...), PERL(uczę się...), JavaScript(uczę się...), JAVA(będą mi kazali się uczyć...)... Ja się głównie uczę...
Go to the top of the page
+Quote Post
auto-all
post
Post #10





Grupa: Zarejestrowani
Postów: 49
Pomógł: 7
Dołączył: 2.04.2011
Skąd: Wawa

Ostrzeżenie: (0%)
-----


Porównuj dane z hashem który wygenerujesz sobie na stronie http://gen24.pl/ i sprawdź czy te przekłamanie występuje podczas rejestracji czy podczas autoryzacji (moze do bazy zapisujesz niepoprawna wartość tego $salt).
Go to the top of the page
+Quote Post
Bags_Bunny
post
Post #11





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


Cytat(auto-all @ 15.04.2011, 12:14:50 ) *
(moze do bazy zapisujesz niepoprawna wartość tego $salt).

Słuszna uwaga. Może np. wielkość pola w bazie jest niewłaściwa i sól jest rozsypywana?


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
neosatan
post
Post #12





Grupa: Zarejestrowani
Postów: 79
Pomógł: 2
Dołączył: 29.04.2009
Skąd: wrocław

Ostrzeżenie: (0%)
-----


faktycznie. sól była rozsypywana. Długość pola była o 1 za mała.
Dziękuję wszystkim za pomoc.


--------------------
C/C++ (ucze się...), PHP (ucze się...), SMARTY(ucze się...), PYTHON(ucze się...), C#(uczę się...), PERL(uczę się...), JavaScript(uczę się...), JAVA(będą mi kazali się uczyć...)... Ja się głównie uczę...
Go to the top of the page
+Quote Post
Bags_Bunny
post
Post #13





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


Też nie lubię niedosolonych potraw wink.gif
Cieszymy się, że mogliśmy pomóc i prosimy o "pomogła" wink.gif

Ten post edytował Bags_Bunny 15.04.2011, 17:34:47


--------------------
rm -rf /*
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:05