Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]salt jako hasło?
Forum PHP.pl > Forum > Przedszkole
robos85
mam pytanie, w bazie danych zapisuję hasło użytkownika. hashuję hasło z forma tylko md5 i zapisuję do bazy.
Czytałem o saltach, lecz czy do tego celu trzeba to robić? Czy wystarczy md5?
Czy np zmieszać datę rejestracji w md5 z hasłem i to md5? - taki przykład
kipero
Sól ma za zadanie utrudnienie odczytania hasła za pomocą tablic tęczowych czy też brute force'a. Data rejestracji nie jest chyba złym pomysłem, ale później przy logowaniu musiałbyś najpierw odczytać datę rejestracji, "dołożyć" ją do przesyłanego hasła i dopiero porównać hashe. IMHO sam md5 wystarcza jeżeli wymagasz konkretnej długości hasła, np. min. 6 znaków.
skowron-line
Moim zdaniem min 6 znaków literki i cyferki powinny wystarczyć a także czy w haśle nie zawiera sie login.
barthpl
Oczywiście zgodzę się że warto sprawdzać czy hasło nie jest za krótkie, ma kilka literek i nie zawiera w sobie loginu czy innych danych użytkownika (imie, nazwisko, data, etc). Polecam też wzbogacić md5. Ja na przykład korzystam z takiej funkcji:
  1. <?php
  2. // Maskowanie hasła użytkownika. Skrót hasła składa się ze 128 znaków alfanumerycz
    nych.
  3. function hashPassword( $pass )
  4. {
  5. $prefix = sha1( md5(time()).$pass );
  6. $suffix = sha1( md5($pass.time()) );
  7. $suffix .= substr( md5($suffix), -);
  8. return $prefix.sha1($prefix.$pass.$suffix).$suffix;
  9. }
  10. // Sprawdzanie poprawności hasła. Gdzie $user to skrót hasła zapisany w bazie danych
  11. // natomiast $pass to wartość podana przez użytkownika w formularzu logowania.
  12. function verifiePassword( $user, $pass )
  13. {
  14. $prefix = substr( $user, 0, 40 );
  15. $suffix = substr( $user, 80, 48 );
  16. $password = $prefix.sha1($prefix.$pass.$suffix).$suffix;
  17.  
  18. return strcmp( $user, $password ) == 0;
  19. }
  20. ?>

Dzięki temu to samo hasło zawsze ma inny skrót a dzięki temu jego przechowywanie staje się bezpieczniejsze.
robos85
moje hasło ma min 6 znaków, max 40. Nie ma sprawdzenia innego.
barth czyli w zapisie do bazy daję insert...... i dla pola password: hashPassword($_POST['pass'] - przykład.
i w autoryzacji: pobieram z bazy dane i daję w ifa (verifiePassword(wart_z_bazy,$_POST['pass']) ...


Takie użycie tego jest ?

aha, i pole hasła ma 128 znaki tak? Bo w bazie jak coś ograniczę pole pass też:)
barthpl
Cytat(robos85 @ 27.08.2008, 17:12:30 ) *
barth czyli w zapisie do bazy daję insert...... i dla pola password: hashPassword($_POST['pass'] - przykład.
i w autoryzacji: pobieram z bazy dane i daję w ifa (verifiePassword(wart_z_bazy,$_POST['pass']) ...
Takie użycie tego jest ?

Dokładnie tak.

Cytat(robos85 @ 27.08.2008, 17:12:30 ) *
aha, i pole hasła ma 128 znaki tak? Bo w bazie jak coś ograniczę pole pass teżsmile.gif

Tak. 40 znaków od prefiksu, 40 znaków od magicznego skrótu (prefiks, hasło, sufiks) i 48 od sufiksu. Łącznie 128. Może być to zapisane na przykład w varchar(128).
robos85
OK, dzięki.
Z tego co widzę, gdy hasło jest poprawne funkcja zwraca 1?

Możesz zobaczyć na ten post jeszcze?
własny system sesji
barthpl
Cytat(robos85 @ 27.08.2008, 17:24:35 ) *
OK, dzięki.

Kliknij pomógł i będziemy kwita winksmiley.jpg

Cytat(robos85 @ 27.08.2008, 17:24:35 ) *
Z tego co widzę, gdy hasło jest poprawne funkcja zwraca 1?

Zwraca true (czyli 1) jak się weryfikacja powiedzie i fasle w razie porażki.
robos85
dzięki serdeczne:)
teraz obmyślać sposób logowania i sesji i można działać:)
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.