Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Hashowanie hasła
Kerth
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cześć,
krótka piłka. Czym kodować(hashować) hasła? SHA1, MD5 czy połączenie tego?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


http://pl1.php.net/manual/en/function.crypt.php
Im silniejsze tym lepsze, i nie na pewno wymienione przez Ciebie
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


PHP ≥ 5.5: http://www.php.net/manual/en/function.password-hash.php
PHP < 5.5: https://github.com/ircmaxell/password_compat
Go to the top of the page
+Quote Post
redeemer
post
Post #4





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


bcrypt (Blowfish):

Dla PHP >= 5.5.0:
password_hash
password_verify
Go to the top of the page
+Quote Post
Kerth
post
Post #5





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


A jak mam zrobić, żeby mi nie kodowało 2 różnych haseł?

  1. $register->bindValue(":haslo", crypt($haslo), PDO::PARAM_STR);
  2. $register->bindValue(":haslo2", crypt($haslo2), PDO::PARAM_STR);

Pole bazie `haslo`->> $1$e0/.PG/.$lNIJVk/qR9OqR4wpBSSPG.
Pole bazie `haslo2`->> $1$s.1.FU2.$kCGONs2fi9OHh39B8QxUO0

Co zrobić, by w haslo2 było takie same hasło jak w haslo?
Go to the top of the page
+Quote Post
Michael2318
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Byle nie md5 i koniecznie hasła z solą.
Ja polecam dla każdego usera tworzyć czas rejestracji w timestamp i zapisywać to userowi jako sól do hasła. W ten sposób każdy user ma inną sól.
Go to the top of the page
+Quote Post
redeemer
post
Post #7





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


  1. $crypted = crypt($haslo);
  2.  
  3. $register->bindValue(":haslo", $crypted, PDO::PARAM_STR);
  4. $register->bindValue(":haslo2", $crypted, PDO::PARAM_STR);
(IMG:style_emoticons/default/questionmark.gif) Zresztą to jest bez znaczenia, mogą być różne - w czym problem? No i po co Ci haslo i haslo2 w bazie?


Ten post edytował redeemer 3.07.2014, 22:06:26
Go to the top of the page
+Quote Post
Kerth
post
Post #8





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Cytat(Michael2318 @ 3.07.2014, 23:03:17 ) *
Byle nie md5 i koniecznie hasła z solą.
Ja polecam dla każdego usera tworzyć czas rejestracji w timestamp i zapisywać to userowi jako sól do hasła. W ten sposób każdy user ma inną sól.


Powiem Ci, że w zasadzie ja zapisuję datę rejestracji w datetime, przez co mam datę i godzinę rejestracji w jednym polu. Btw. to dobrze, że tak jest? A jeśli chodzi o takie połączenie daty w sól to mógłbyś podać jakiś mały przykład?

Cytat(redeemer @ 3.07.2014, 23:05:25 ) *
  1. $crypted = crypt($haslo);
  2.  
  3. $register->bindValue(":haslo", $crypted, PDO::PARAM_STR);
  4. $register->bindValue(":haslo2", $crypted, PDO::PARAM_STR);
(IMG:style_emoticons/default/questionmark.gif) Zresztą to jest bez znaczenia, mogą być różne - w czym problem? No i po co Ci haslo i haslo2 w bazie?


W zasadzie to nie wiem po co ja jes zapisuje, przecież wystarczy tylko jedno.
Go to the top of the page
+Quote Post
redeemer
post
Post #9





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Wiele algorytmów ma wbudowaną obsługę soli, która jest zapisana w zwracanym hashu. Dlatego pomimo puszczenia tego samego stringa (hasła) poprzez takie funkcje jak password_hash, wyniki są różne.

Ten post edytował redeemer 3.07.2014, 22:15:46
Go to the top of the page
+Quote Post
Kerth
post
Post #10





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


A jak ja mam to hasło odkodować?

  1. $crypted_login = crypt($_POST['haslo']);
  2. $login = $db->prepare("SELECT `nick`, `haslo` FROM `gracze` WHERE `nick` = BINARY :nick && `haslo` = BINARY :haslo");
  3. $login->bindValue(":nick", $_POST['nick'], PDO::PARAM_STR);
  4. $login->bindValue(":haslo", $crypted_login, PDO::PARAM_STR);
  5. $login->execute();
  6.  
  7. $idlogin = $db->prepare("SELECT `id` FROM `gracze` WHERE `nick` = BINARY :nick && `haslo` = BINARY :haslo");
  8. $idlogin->bindValue(":nick", $_POST['nick'], PDO::PARAM_STR);
  9. $idlogin->bindValue(":haslo", $crypted_login, PDO::PARAM_STR);
  10. $idlogin->execute();


(IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Michael2318
post
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


hashu sie nie odkodowuje tylko koduje hasło, ktore podaje user i sprawdza czy hashe sie zgadzają.
Go to the top of the page
+Quote Post
Kerth
post
Post #12





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


  1. if ($login->rowCount() == 1)
  2. {
  3. ...
  4. }
  5. if ($idlogin->rowCount() == 1)
  6. {
  7. ...
  8. }


Takie warunki mam do kodów powyżej. Więc jak mam sprawdzić czy jest takie samo. Nie rozumiem za bardzo tego.
Go to the top of the page
+Quote Post
Kerth
post
Post #13





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


No to mam tak:

  1. $pass_crypt = crypt($_POST['haslo']);
  2. $login = $db->prepare("SELECT `nick`, `haslo` FROM `gracze` WHERE `nick` = BINARY :nick && `haslo` = BINARY :haslo");
  3. $login->bindValue(":nick", $_POST['nick'], PDO::PARAM_STR);
  4. $login->bindValue(":haslo", $pass_crypt, PDO::PARAM_STR);
  5. $login->execute();
  6.  
  7. $idlogin = $db->prepare("SELECT `id` FROM `gracze` WHERE `nick` = BINARY :nick && `haslo` = BINARY :haslo");
  8. $idlogin->bindValue(":nick", $_POST['nick'], PDO::PARAM_STR);
  9. $idlogin->bindValue(":haslo", $pass_crypt, PDO::PARAM_STR);
  10. $idlogin->execute();


i nadal nie loguje mi do konta.
Go to the top of the page
+Quote Post
redeemer
post
Post #14





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Polecam http://php.net/manual/pl/function.crypt.php
Go to the top of the page
+Quote Post
Kerth
post
Post #15





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


Tyle mi zwraca:

1. Próba logowania:
  1. string(5) "Kerth" string(34) "$1$5g..oE..$xKTUYQsNnm1RFq.SNdTvp0"


2. Próba logowania:
  1. string(5) "Kerth" string(34) "$1$R73.GT/.$TcoBKLZYo3iJHm2Y0N4K61"


  1. var_dump($_POST['nick']);
  2. var_dump($pass_crypt);


nick jest w porządku tylko z hashem problemy. Ono za każdym razem wyświetla się inne(nie zgadza się z tym w bazie). Przy każdej próbie logowania inne.

Hasło w bazie:

$1$ZC3.uB/.$SQbz8cHGDUL1N9FMbujXP1

Ten post edytował Kerth 3.07.2014, 23:11:35
Go to the top of the page
+Quote Post
redeemer
post
Post #16





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Powtarzam: przeczytaj manuala, bo nie tak się sprawdza czy użytkownik podał prawidłowe "hasło" w przypadku crypt.

Ten post edytował redeemer 3.07.2014, 23:16:28
Go to the top of the page
+Quote Post
by_ikar
post
Post #17





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


W manualu dla pasword_hash jest link do odpowiednika funkcji z php5.5 dla >=php5.3.7: https://github.com/ircmaxell/password_compat i w przykładach masz jak tego używać.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Aby porównać hasła zakodowane metodą Crypt:
  1. $crypted_login = crypt($_POST['haslo'], $zakodowane_haslo_z_bazzy);
  2. if($crypted_login == $zakodowane_haslo_z_bazy {
  3. // OK
  4. } else {
  5. //Kiszka
  6. }
Go to the top of the page
+Quote Post
Kerth
post
Post #19





Grupa: Zarejestrowani
Postów: 250
Pomógł: 1
Dołączył: 6.08.2012

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


A jak ja mam pobrać $zakodowane_haslo_z_bazzy ?
Go to the top of the page
+Quote Post
Turson
post
Post #20





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jeżeli mówimy o logowaniu, to przecież musisz trzymać w bazie hasło, więc je pobierasz i porównujesz z wprowadzonym w formularzu.

Ten post edytował Turson 4.07.2014, 09:29:53
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 14.09.2025 - 17:13