Haszowanie to funkcja jednokierunkowa (cóż, mapowanie). Jest to nieodwracalne, stosujesz bezpieczny algorytm mieszania i nie możesz odzyskać oryginalnego ciągu. Jedyne, co możesz zrobić, to wygenerować coś, co nazywa się „kolizją”, czyli znaleźć inny ciąg, który zawiera ten sam hash. Bezpieczne kryptograficznie algorytmy wyznaczania wartości skrótu mają zapobiegać występowaniu kolizji. Możesz zaatakować bezpieczny haszysz za pomocą tęczowego stołu , któremu możesz przeciwdziałać, dodając sól do haszyszu przed jego przechowywaniem.
Szyfrowanie to właściwa (dwukierunkowa) funkcja. Jest odwracalny, możesz odszyfrować zniekształcony ciąg, aby uzyskać oryginalny ciąg, jeśli masz klucz.
Niebezpieczna funkcja, do której się odnosi, polega na tym, że jeśli zaszyfrujesz hasła, Twoja aplikacja ma gdzieś przechowywany klucz, a osoba atakująca, która uzyska dostęp do Twojej bazy danych (i / lub kodu), może uzyskać oryginalne hasła, uzyskując zarówno klucz, jak i zaszyfrowany tekst , podczas gdy z hashem jest to niemożliwe.
Ludzie zwykle mówią, że jeśli cracker jest właścicielem Twojej bazy danych lub Twojego kodu, nie potrzebuje hasła, więc różnica jest dyskusyjna. Jest to naiwne, ponieważ nadal masz obowiązek chronić hasła użytkowników, głównie dlatego, że większość z nich używa w kółko tego samego hasła, narażając ich na większe ryzyko, ujawniając ich hasła.