• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

password_hash - spostrzeżenia...

Object Storage Arubacloud
0 głosów
1,673 wizyt
pytanie zadane 18 stycznia 2016 w PHP przez Bartess Gaduła (3,630 p.)

Witam. Może nie na temat zbytnio, ale takie dziwne rzeczy zauważyłem... hashowanie hasła za dażdym razem daje inny wynik. Takie pytanie techniczne, z ciekawości... Skąd PHP wie, że hasło jest prawidłowe?

Widzę, że początki hashów są takie same. Czy to oznacza, że reszta to sól?

<?php
echo "<pre><BR>hasło: qaz123: ". $hashedPassword1 = password_hash('qaz123', PASSWORD_DEFAULT) ;
echo "<BR>hasło: qaz123: ". $hashedPassword2 = password_hash('qaz123', PASSWORD_DEFAULT) ;
echo "<BR>hasło: qaz123: ". $hashedPassword3 = password_hash('qaz123', PASSWORD_DEFAULT) ;
echo "<BR>hasło: qaz123: ". $hashedPassword4 = password_hash('qaz123', PASSWORD_DEFAULT) ;
echo "<BR>f: ". password_verify('nieprawidłowe hasło', $hashedPassword); // false
echo "<BR>t: ". password_verify('qaz123', $hashedPassword1); // true
echo "<BR>t: ". password_verify('qaz123', $hashedPassword2); // true
echo "<BR>t: ". password_verify('qaz123', $hashedPassword3); // true
echo "<BR>t: ". password_verify('qaz123', $hashedPassword4); // true
?>

Dostaję:

hasło: qaz123: $2y$10$OqxqwpbNkQ0KOENiNvSiFuvyh/ckL27iN5KcFOqh57vGxox7gqoUS
hasło: qaz123: $2y$10$YucN9SiQRx/4QIQaMdTnduZh9ta70JtSeilrOBs2Sp0LgFimtXFVu
hasło: qaz123: $2y$10$uxE.VRvCmMqQ3vtsWAFtFuKwPDxkjJbhj8aCgOtyVKJ8S5Hz4Rjay
hasło: qaz123: $2y$10$BkYEPE8uO4Ex.h2iLuooEeWm6WHBxDRwb.XCBYdm/NINYaZzAp4cC
f: 
t: 1
t: 1
t: 1

Pozdrawiam

1 odpowiedź

+2 głosów
odpowiedź 18 stycznia 2016 przez event15 Szeryf (93,790 p.)
$2y$10$OqxqwpbNkQ0KOENiNvSiFuvyh/ckL27iN5KcFOqh57vGxox7gqoUS

Jak widzisz, hash ten składa się z kilku części - być może nie przyglądałeś się temu do tej pory.

$2y$10$ - mamy tutaj informację o tym, jaki algorytm został użyty (w tym przypadku jest to blowfish z wersją y.

Później jest liczba 10, która oznacza work factor. (Domyślnie jest to 12).

Po tym ciągu jest losowo wygenerowany hash - 22 znaki, które są wg patternu: [A-Za-z0-9].

Każde zwiększenie licznika work factor powoduje dwukrotne przedłużenie czasu potrzebnego na obliczenia. Wartość ta może być w zakresie <4, 99>. 

Funkcja password_verify posiadając te wszystkie dane, czyli koszt (work fator), rodzaj algorytmu i hash 22 znakowy wykonuje coś takiego:

function password_verify($password, $hash) {
            if (!function_exists('crypt')) {
                trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
                return false;
            }
            $ret = crypt($password, $hash);
            if (!is_string($ret) || PasswordCompat\binary\_strlen($ret) != PasswordCompat\binary\_strlen($hash) || PasswordCompat\binary\_strlen($ret) <= 13) {
                return false;
            }
            $status = 0;
            for ($i = 0; $i < PasswordCompat\binary\_strlen($ret); $i++) {
                $status |= (ord($ret[$i]) ^ ord($hash[$i]));
            }
            return $status === 0;
}

Proszę bardzo: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php#L225-L252

komentarz 18 stycznia 2016 przez event15 Szeryf (93,790 p.)

Podobne pytania

0 głosów
2 odpowiedzi 1,022 wizyt
pytanie zadane 13 marca 2018 w PHP przez MrxCI Dyskutant (8,260 p.)
0 głosów
0 odpowiedzi 231 wizyt
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 19 grudnia 2017 w PHP przez Bartess Gaduła (3,630 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...