Hashowanie

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
darek334
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 118
Rejestracja: 17 mar 2015, 14:17
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64

Hashowanie

Post autor: darek334 » 30 lis 2018, 16:09

Nie no wymiękam, o co tu chodzi z tym hashowaniem ? Potrzebuje wyprodukować hash z jakiegoś łańcucha. Właściwie ten sam hash bo będzie on zapisany w bazie mysql i będę potem potrzebował go odnaleźć. Ale nie kumam tych funkcji, szczerze.
Jak dla mnie na razie najbardziej pasuje funkcja string hash ( string $algo , string $data ), produkuje ona zawsze ten sam hash o pewnej długości czyli to co poszukuję np:

Kod: Zaznacz cały

echo hash('md5', 'alamakota' );
zawsze produkuje: 49aa66843380c377e93b198b966eb699, i jest to dobrze, ale sęk w tym że wolałbym aby łańcuch tekstu był złożony z szerszej gamy znaków: dużych liter itp. Jak sie wczytuje w funkcje hashujące to tutaj zaczynam tego nie rozumieć. Jak to jest ?
Na przykład taka funkcja password_hash('alamakota', PASSWORD_DEFAULT); ale ona produkuje za każdym razem co innego ! Więc po co mi taki hash którego nie moge porównać ?!
Najciekawsze w tym jest to, że piszą iż można go porównać za pomocą funkcji password_verify ( string $password , string $hash ), tylko najciekawsze w tym jest jeszcze raz to, że te porównania u mnie nie działają. Abstrahując od tego że na mój cel to nie jest rozwiązanie którego szukam, bo jeszcze raz podkreślę potrzebuje zawsze ten sam hash, to tak czytając i zagłębiając się trafiłem na to i mnie to dziwi. Co mi z hasha którego nie moge porównać, po co mi takie coś ???
I tak dla przykładu:

Kod: Zaznacz cały

//produkujemy pierwszy hash
echo $aa = password_hash('alamakota', PASSWORD_DEFAULT);
echo $aa = '<br>';
//produkujemy drugi hash
echo $bb = password_hash('alamakota', PASSWORD_DEFAULT);
echo $aa = '<br>';

//porównujemy hashe
echo password_verify($bb, $aa)?'te same hashe':'nie te same hashe';
Wywala mi za każdym razem inne hashe a porównanie ich sie nie udaje:

Kod: Zaznacz cały

$2y$10$sRiagMqvxIIzF.WS6XuNDeltKqPNPP4.5cA/tuxwnV8DUMrgqdxZa
$2y$10$.OEWhTN71c5kzpOLLOg/juTDjqByvBUkvMRW5L2vUrul0fTk1z3/y

nie te same hashe
Więc do czego to służy w takim razie ? Po co mi takie hashe których nie mogę porównać ??!! W tych manualach w które mozna sie wczytac rozpisuja sie tam że te własnie funkcje sa najlepsze dla hashowania haseł itp bo sa tam time bezpieczne itp. Są podane przykłady proste przykłady hashowania i porównania haseł np ze strony o password_verify:
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

Kod: Zaznacz cały

//$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; - to jest źle

$hash = password_hash( 'rasmuslerdorf' , PASSWORD_DEFAULT);

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
[s]Tylko że to ne działa bo po sprawdzeniu tegom kodu wyświetlane jest: Invalid password.[/s]

Okazuje się że w tym drugim przypadku jest błąd na stronie PHP. Zamiast hasha trzeba wstawić linię produkującą hash i wtedy bedzie działać co jest zgodne z opisem. Przykład poprawiłem.

Kody wklejamy na ta strone żeby sprawdzić ich działanie:
http://phptester.net
ODPOWIEDZ

Wróć do „Programowanie”