Resposta curta: MD5 é uma maneira de saber o suficiente sobre uma senha para compará-la - uma impressão digital única - sem realmente manter a senha por perto.
Mais um: O MD5 pode ser pensado em um gerador de impressões digitais. Você pega o máximo de bits possível e o final é de 128 bits. O md5sum sempre será o mesmo para qualquer string. Mas, é difícil prever o que um md5sum será para qualquer string dada. Não pode ser revertido. Você não pode recuperar a senha do hash, essa informação é descartada.
Por que MD5? Você não quer armazenar a senha real. Se eu conseguir invadir seu banco de dados, receberei as senhas. Isso não é seguro.
Então eu posso armazenar um hash. No login, recebo md5sum da senha que você digitou, e o md5sum no db, vê se eles combinam. Então, mesmo se você receber o hash, não poderá voltar atrás para obter a senha. Você tem o hash, mas em teoria você não pode obter a senha.
Isso é mais seguro, mas lembre-se, a mesma senha sempre será hash para o mesmo md5. 'password' sempre será 286755fad04869ca523320acce0dc6a4. Se eu ver 286755fad04869ca523320acce0dc6a4 no banco de dados, sei que sua senha é 'senha'. Então, uma técnica é adicionar algo chamado 'sal', um pouco de exclusividade à sua senha. Então, digamos para mim, meu sal é escolhido para ser, oh Idunno, '1b24'. Eu adiciono isso aos dados md5, que me pegam c4f8469e00c67d70dfbaa91cdf948fa8. Quando eu armazenar a senha, talvez eu armazene 1b24 | c4f8469e00c67d70dfbaa91cdf948fa8. Então, quando você digita 'senha', eu vejo no banco de dados eu preciso adicionar 1b24, e eu recebo a correspondência.
O MD5 não é realmente usado para isso. Há outros mais recentes (como o SHA1) que jogam os bits melhor. Às vezes você passa por várias rodadas. Isso aumenta a segurança ao dificultar a geração de listas enormes dessas impressões digitais - é muito demorado para computar.