Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z md5()
Forum PHP.pl > Forum > PHP
suworow
Witam i pozdrawiam wszystkich. Zrobiłem system logowania. Całość działa poprawnie, problemy są tylko z odczytem zahashowanych za pomoca funkcji md5() haseł z bazy danych. Spradzanie poprawności hasła zrobione jest tak:

  1. <?php
  2. //kod
  3. $sprawdz=mysql_query("SELECT * FROM $mysql_tabela WHERE login='$login' and haslo='$haslo' and status=5");
  4.  
  5. if (mysql_num_rows($sprawdz)==1) {
  6. //kod
  7.  
  8. }
  9. ?>

Problem polega na tym, że powyższy warunek nie jest prawdziwy gdy używam hashowania (zahashowane hasło w bazie nie zgadza się z prowadzanym w oknie logowania). Na "gołych" hasłach - bez md5 - wsztstko działa poprawnie. Co jest przyczyną tego problemu?
kwiateusz
a haslo trzymane w $haslo to jest czyste haselko z formularza ? czy wczesniej je kodujesz przez md5 ?
bigZbig
Jesli w bazie trzymasz hasla zakodowane to przed porownaniem musisz zakodowac rownierz haslo podawane podczas logowania.
Neotion
1. Co to ma do php5?
2. Masz może włączone register_globals ?

3. Nie działa Ci bo nie hashujesz tego co użytkownik podał w formularzu.. worriedsmiley.gif

  1. <?php
  2. $sprawdz=mysql_query("SELECT * FROM $mysql_tabela WHERE login='$login' and haslo='".md5($haslo)."' and status=5");
  3. ?>
revyag
Przenoszę

PHP5->php
NetJaro
Podaj więcej szczegółów bo narazie nie możemy Ci pomóc..
suworow
Cytat(kwiateusz @ 11.07.2006, 12:10 ) *
a haslo trzymane w $haslo to jest czyste haselko z formularza ? czy wczesniej je kodujesz przez md5 ?


Md5 jest użyte wszędzie tam gdzie trzeba...sprawdzałem. Stronę testuję na tripodzie, mają tam php 4.4 ale to raczej nie jest problem wersji bo md5, z tego co wiem, było już w PHP3.

Cytat(Neotion @ 11.07.2006, 12:13 ) *
2. Masz może włączone register_globals ?

3. Nie działa Ci bo nie hashujesz tego co użytkownik podał w formularzu.. worriedsmiley.gif


ad.2) register_globals są włączone
ad.3) wszystko jest haszowane (zapomniałem dodać do kodu w poście $haslo = md5($haslo))

md5 działa poprawnie, tzn. hashuje takie samo hasło za każdym razem identycznie. Problem jest z porównaniem zahaszowanego(!) hasła z formularza z tym z bazy.

P.S. Sorry, że dałem posta nie na tą listę - ja nie chciał... ja nacisnął worriedsmiley.gif. Wielkie dzięki za pomoc.
Cysiaczek
Sprawdzałeś, jaki masz typ pola w bazie danych? Może hashujesz coś z pustymi znakami etc?
Czy możesz podac w jaki sposób porównujesz te dwa hashe?
suworow
Cytat(Cysiaczek @ 11.07.2006, 15:08 ) *
Sprawdzałeś, jaki masz typ pola w bazie danych? Może hashujesz coś z pustymi znakami etc?
Czy możesz podac w jaki sposób porównujesz te dwa hashe?

Typ pola: varchar bez atrybutów. Wpisuję standardowe znaki - litery+cyfry, puste znaki nie wchodzą w grę. Hashe porównuję tak jak w podanym w pierwszym poście kodzie, czyli z formularza pobieram $login i $haslo a potem za pomocą zapytania SELECT porównuję ilość odpwiadających rekordów w bazie danych. Jezeli podany login i hasło są poprawne to wynik (zmienna $sprawdz) ==1 i następuje zalogowanie a jeżeli nie to nie smile.gif.
nospor
Cytat
Typ pola: varchar bez atrybutów
no a dlugosc tego pola? bo md5 generuje 32 znaki i jesli ty masz krotszą dlugsc pola no to szlag trafi ci hashe smile.gif (zostaną brutalnie skrócone)
suworow
Dzięki!!! To była przyczyna. Ustawiłem sobie na 16 znaków blinksmiley.gif Szacunek dla Zarządu...bede na was głosować winksmiley.jpg
Athlan
Tak na przyszłość:
md5" title="Zobacz w manualu php" target="_manual

Cytat(MANUAL)
Calculates the MD5 hash of str using the RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. The hash is a 32-character hexadecimal number.
nasty
Cytat
no a dlugosc tego pola? bo md5 generuje 32 znaki i jesli ty masz krotszą dlugsc pola no to szlag trafi ci hashe


~nospor: od php 5.0 jest mozliwosc zwracania hashu o dlugosci 16 w postaci (raw - binarna)m tak wiec 16 nie koniecznie mosi byc za krotkie...
e.g. :
  1. <?php
  2. $hash = md5("text do hashowanie",true); // binarne
  3. ?>
nospor
Cytat
~nospor: of php 5.0 jest mozliwosc zwracania hashu o dlugosci 16 w postaci (raw - binarna)m tak wiec 16 nie koniecznie mosi byc za krotkie...
Ogolnie nie koniecznie, ale....
1) wiekszosc o tym nie wie i 100% bledow tego typu na forum to ludzie mieli za krotkie pola. mowie to z doswiadczenia
2) jakbys przeczytal caly topic to bys widzial ze koles generuje 32 znaki w md5:
Cytat
wszystko jest haszowane (zapomniałem dodać do kodu w poście $haslo = md5($haslo))
nasty
ok, ja tylko chce podac dla ~suworow jeszcze jedno alternatywne rozwiazanie...
pozdrawiam
nospor
Cytat
ok, ja tylko chce podac dla ~suworow jeszcze jedno alternatywne rozwiazanie...
To skoro to ma byc alternatywa dla ~suworow to czemu slowa kierujesz do mnie?
Cytat
~nospor: od php 5.0 .....

Tyle OT. to bylo pytanie retoryczne, konczmy dyskusje
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.