To nie jest kodowanie i dekodowanie, to jest hashowanie!
Hashowanie to tworzenie od podanego ciągu skrótu nieodwracalnego. To co znalazłeś to nie żadne dekodery, ale wyszukiwanie konfliktów lub tzw. tęczowe tablice. Skoro w wypadku md5 wszystko zamienia się na ciągi 32-znakowe, to wiadomo, że występować będą kolizje tj. kilka ciągów, które po hashowaniu da w efekcie ten sam skrót (albo podchodząc do tego matematycznie: skoro ilość możliwych ciągów jest nieskończona, to ilośc konfliktów również dąży do nieskończoności).
Podstawa: z hasha nie jesteś w stanie wyciągnąć oryginalnego ciągu znaków! Można znaleźć jedynie coś z takim samym hashem (co przy użyciu samego md5 [np. phpbb2, phpbb2 by Przemo] pozwoli na zalogowanie się).
Sam hash md5 to nie jest obecnie żadne zabezpieczenie, bo istnieją naprawdę rozbudowane tablice z kolizjami i znalezienie takowej nie trwa zbyt długo. Stosowane są różne techniki do "wzmanciania" hashy i utrudniania wyszukiwania kolizji. Dla przykładu MyBB stosuje coś takiego i tak wygląda tworzenie hasha:
Kod:
md5(md5($salt).$password)
Gdzie $salt to losowy ciąg znaków ze zbiorów a-Z1-9 o długości 8 (indywidualny dla każdego użytkownika i zapisywany w bazie), a $password to wprowadzone przez użytkownika hasło. Takie zmiany w hashach to nie jest idealna metoda, ale zawsze utrudnia znalezienie kolizji.
Możesz zapytać teraz - skoro nie ma w bazie ani prawdziwych haseł, ani nie da się ich wydobyć, to w jaki sposób jest możliwe logowanie się? Ano w bardzo prosty.
Gdy użytkownik próbuje się zalogować, wpisane przez niego hasło również jest zamieniane na hash. Ten hash jest porównywany z tym wpisanym w bazie. Jeżeli się zgadza, to użytkownik może zostać zalogowany.
Podsumowując:
Dlaczego hasha a nie hasła? Bo nawet w wypadku włamania, znaleziony może być
jedynie konflikt. Jeżeli ktoś używa dobrego, niesłownikowego hasła (np. wspomniane wcześniej zdania) to uzyskanie takiego samego ciągu-konfliktu jest w zasadzie niemożliwe. Ktoś znajdzie konflikt, ale z innym słowem i w wypadku wycieku bazy danych być może uda mi się zalogować tylko do tego pojedynczego serwisu. Nawet jeżeli użytkownik stosuje w wielu miejscach to samo (mocne) hasło, to najprawdopodobniej są tam stosowane inne kombinacje / inne solenie i znaleziony konflikt nie da nikomu dostępu.