MD5, ani żadnych innych tego typu nie zdekodujesz inaczej niż słownikowo, bo nie do tego to służy. Po prostu kiedy sprawdzasz hasło od usera to haszujesz jego wejście i porównujesz obydwa zahashowane ciągi dopiero. W PHP-ie 5.5 zaleca się używanie tej funkcji do hashowania. http://php.net/manual/en/function.password-hash.php
Przykładowo jeśli założymy, że użytkownik już się zarejestrował i jego zahashowane hasło jest już w bazie no to skrypt logowania powinien wyglądać mniej więcej tak:
$con = new mysqli("host", "user", "pass", "db");
$inLog = addslashes($_POST['login']);
$inPass = password_hash(addslashes($_POST['passwd']), 8);
$sel = $con->query("SELECT count(1) AS ile FROM users WHERE login='$inLog' AND pass='$inPass'");
Ta cyferka, którą podajesz jako drugi argument tej funkcji to jest 'poziom szyfrowania'. Im większy tym dłużej trwa hashowanie.