Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Hashowanie hasla + sol.
Forum PHP.pl > Forum > Bazy danych > MySQL
cvanyy
Witam,
mecze sie juz z moim hashowaniem pare dni i dalej nie mam pojecia dlaczego to wszystko nie dziala.Rejestracja uzytkowniak przebiega bezproblemowo, jednak przy logowaniu nie widzi uzytkownikow i wywala blad, ze nie ma takiego uzytkowniaka. Zastanawiam sie czy przy dodawniu przy logowaniu soli do hasla, nie ma innego wyniku i dlatego nie przepuszcza. Od patrzenia na ten caly kod juz mam metlik, moze ktos z Was umie zobaczyc co jest tam nie tak?

Logowanie
  1. <?php
  2.  
  3. require_once "polaczenie_z_baza.php";
  4.  
  5. //nawiazanie polaczenia z baza
  6. $polaczenie = mysqli_connect($host, $db_user, $db_password, $db_name);
  7. //@ - wyciszenie bledow
  8. mysqli_select_db($polaczenie,"projekt");
  9.  
  10. if($polaczenie->connect_errno!=0)
  11. {
  12. echo "Error: ".$polaczenie->connect_errno;
  13. }
  14. else
  15. {//polaczenie nawiazane:
  16.  
  17. $login = $_POST['login'];
  18. $haslo =$_POST['haslo'];
  19.  
  20. $saltQuery = "SELECT salt FROM uzytkownik WHERE login ='$login'";
  21.  
  22. $result = mysqli_query($polaczenie, $saltQuery); //or die(mysql_error());
  23.  
  24. $row = mysqli_fetch_assoc($result);
  25.  
  26. $result->free();
  27. if ($result = $polaczenie->query($saltQuery)) {
  28.  
  29.  
  30. }
  31.  
  32. $salt = $row['salt'];
  33.  
  34. $saltedPW = $salt. $haslo;
  35.  
  36. $hashedPW = hash('sha256', $saltedPW);
  37.  
  38. //zapytanie sql
  39. $sql = "select * from uzytkownik where login ='$login' and haslo = '$hashedPW'";
  40.  
  41. //wyslanie zapytania do bazy:
  42. if($rezultat = $polaczenie->query($sql))
  43. {
  44.  
  45. $liczba_wierszy = $rezultat->num_rows;
  46.  
  47. if($liczba_wierszy == 1)
  48. {//pobranie danych z bazy danych:
  49.  
  50. //pobranie NAZW indeksow tablicy
  51. $wiersz = $rezultat->fetch_assoc();
  52.  
  53. $_SESSION['Imie'] = $wiersz['Imie'];
  54. $_SESSION['Nazwisko'] = $wiersz['Nazwisko'];
  55. $_SESSION['email'] = $wiersz['email'];
  56. $_SESSION['login'] = $wiersz['login'];
  57.  
  58. //zwolnienie
  59. $rezultat->free();
  60.  
  61. //przykladowe wypisanie na ekran:
  62. Echo "witaj ".$_SESSION['Imie']." ".$_SESSION['Nazwisko'];
  63. header('Location: index.php');
  64. //do usuniecia potem
  65. Echo'<a href="index.php">powrot do index.php</a>';
  66. }
  67. else
  68. {// 0 wierszy -> nie udalo sie zalogowac!
  69.  
  70. $_SESSION['msg']='<sman style="color:red">Nieprawidlowy login lub haslo!</span>';
  71.  
  72. header('Location: index.php');
  73. }
  74. }
  75. else{
  76. Echo"Error:<br/>Zle zapytanie sql<br/>";
  77. }
  78.  
  79.  
  80.  
  81.  
  82. //zamkniecie polaczenia z baza:
  83. $polaczenie->close();
  84. }
  85. ?>


Rejestracja:
  1. <?php
  2.  
  3. require_once "polaczenie_z_baza.php";
  4.  
  5. //nawiazanie polaczenia z baza
  6. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  7. //@ - wyciszenie bledow
  8.  
  9. //nie nawiazano polaczenia z baza
  10. if($polaczenie->connect_errno!=0)
  11. {
  12. echo "Error: ".$polaczenie->connect_errno;
  13. }
  14. else
  15. {//polaczenie nawiazane:
  16.  
  17. //pobranie danych z formularza
  18. $login =mysql_real_escape_string( $_POST['login']);
  19. $haslo1 =mysql_real_escape_string( $_POST['haslo1']);
  20. $haslo2 = $_POST['haslo2'];
  21. $nazwisko = $_POST['nazwisko'];
  22. $imie = $_POST['imie'];
  23. $email = $_POST['email'];
  24. //*************************kodowanie "SÓL"***************************
  25. $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
  26.  
  27. $saltedPW = $haslo1 . $salt;
  28. $hashedPW = hash('sha256', $saltedPW);
  29. //zapytanie sql
  30.  
  31. //do sprawdzenia, czy login nie jest juz zajety
  32. $sql_login = "select * from uzytkownik where login ='$login'";
  33.  
  34. //do sprawdzenia, czy email nie jest juz zajety
  35. $sql_email = "select * from uzytkownik where email ='$email'";
  36.  
  37. $sql_email="INSERT INTO `projekt`.`uzytkownik` (`id`, `Imie`, `Nazwisko`, `email`, `login`, `haslo`, salt) VALUES (NULL, '$imie', '$nazwisko', '$email', '$login', '$hashedPW', '$salt')";
  38. ?>


Z gory dziekuje za pomoc. smile.gif
nospor
$saltedPW = $haslo1 . $salt;
$saltedPW = $salt. $haslo;

Naprawde trzeba na forum takich bledow szukac?
cvanyy
To zmienialem juz podczas wykorzystywania kazdej kombinacji, dalej nic smile.gif takze nie w tym tki problem :/
nospor
To przygotuj prosze poprawna wersje bo nie chce mi sie marnowac czasu na szukanie bledow w Twojej kolejnej kombinacji. Programowanie to nie losowe kombinacje a przemyslane dzialanie.
Pyton_000
jaka długość pola na hasło w bazie ?
cvanyy
varchar(60).

nospar wrzucam Ci teraz gotowy taki jak ma byc kod logowania.

Logowanie
  1. $login = $_POST['login'];
  2. $haslo =$_POST['haslo'];
  3.  
  4. $saltQuery = "SELECT salt FROM uzytkownik WHERE login ='$login'";
  5.  
  6.  
  7. $result = mysqli_query($polaczenie, $saltQuery); //or die(mysql_error());
  8.  
  9.  
  10.  
  11. $row = mysqli_fetch_assoc($result);
  12.  
  13. $salt = $row['salt'];
  14.  
  15. $saltedPW = $haslo. $salt;
  16.  
  17. $hashedPW = hash('sha256', $saltedPW);
  18. //prymitywne logowanie:
  19.  
  20. //zapytanie sql
  21. $sql = "select * from uzytkownik where login ='$login' and haslo = '$hashedPW'";
nospor
No i sprawdz sobie teraz jak wyglada dokladnie salt ktory pobrales z bazy, jak wyglada haslo, jak wyglada $hashedPW i czy sie pokrywa z tym co w bazie.
To sa podstawowe etapy debugowania ktore juz dawno powinienies byl zrobic
cvanyy
Sol i haslo jest calkowicie inne niz w bazie, jak to mozliwe skoro pobieram to wszystko z bazy ?
Pyton_000
Cytat(cvanyy @ 16.11.2015, 23:11:03 ) *
varchar(60).


To teraz policz sobie ile znaków ma wynik z SHA256.
Dla przykładu taki:

6f25b3f4bc7eadafb8f57d69f8a59db3b23f198151dbf3c66ac3082381518329
sowiq
  1. $login = $_POST['login'];
  2.  
  3. $saltQuery = "SELECT salt FROM uzytkownik WHERE login ='$login'";


Serio w dzisiejszych czasach ludzie robią jeszcze takie rzeczy? :/
cvanyy
Dziekuje za podpiwiedzi, zmienilem rozmiar tabeli i wszystko dziala jak nalezy smile.gif

Mam natomiast jeszcze jeden problem z zapytaniem SQL. Mianowicie chodzi o to, ze chce wyznaczyc srednia ocen wystawionych dla uzytkownika z tabeli komentarze. I nie wiem czy moge uzyc samego AVG czy musze zsumowac wszystkie oceny i dopiero z tego wyliczyc srednia. Moze ktos podpowiedziec jak powinno wygladac poprawne zapytanie ?

Pyton_000
To temat na inną dyskusję.
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.