Wstęp
Długo zastanawiałem się nad napisaniem tego małego „how to”, ale w końcu doszedłem do wniosku, że warto. Z biegiem czasu komputery stają się coraz szybsze i szybsze… Dlatego osiąganie dużej ilości (biliony na sekundę) hashy podczas tzw. brute-force jest normalnością. Ponadto pojemne dyski (1,2,3 tb) stały się codziennością i w zupełności wystarczają, żeby trzymać na swoim HDD tablice tęczowe (ang. rainbow tables), jest to nic innego jak baza danych, przechowująca zahashowane ciągi znaków (np. md5-1-7-mixedalpha-all-space co znaczy, że tablica zawiera w sobie większość możliwych zakodowanych haseł, które zawierają od 1 do 7 znaków, małe i duże litery alfabetu (mixedalpha), znaki specjalne i spację ). Dodatkowo przy próbie „złamania” zakodowanego hasła może nam pomóc tzw. metoda słownikowa.
Programowanie
W tym tutorialu (w kodzie przykładowego programu) będziemy korzystać z funkcji hashującej md5(), ale bez problemu można zastosować tu kodowanie sha1().
class saltme { var $salt = "425324f475743524f6i9089573";//wymyślamy sobie jakąś sól. musi mieć przynajmniej 22 i nie może zawierać znaków specjalnych function salter($password) { return crypt(md5($password), '$2a$10 Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (: Wyjaśnię tylko co oznaczają '$2$10 Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (: Wyjaśnię tylko co oznaczają '$2$10 Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (: Wyjaśnię tylko co oznaczają '$2$10$' w funkcji crypt(): $2 - informuję funkcję, że będziemy korzystać z algorytmu blowfish. $10 - oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024) w funkcji crypt(): $2 - informuję funkcję, że będziemy korzystać z algorytmu blowfish. $10 - oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024) w funkcji crypt(): $2 - informuję funkcję, że będziemy korzystać z algorytmu blowfish. $10 - oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024) .$this->salt); } } $salty = new saltme; echo $salty->salter('alekot');
Kod PHP jest wyjątkowo prosty i nie ma co go wyjaśniać (:
Wyjaśnię tylko co oznaczają '$2$10$’ w funkcji crypt():
$2 – informuję funkcję, że będziemy korzystać z algorytmu blowfish.
$10 – oznacza wykładnik potęgi do, której zostanie podniesiona 2 (10 => 2^10 = 1024)