Como mostrado na imagem acima, se a senha é criptografada, é sempre um segredo oculto onde alguém pode extrair a senha em texto sem formatação. No entanto, quando a senha é hash, você fica relaxado, pois praticamente não há método de recuperar a senha do valor do hash.
Extraído de senhas criptografadas x senhas hash - Qual é melhor?
A criptografia é boa?
As senhas de texto simples podem ser criptografadas usando algoritmos de criptografia simétrica como DES, AES ou com qualquer outro algoritmo e ser armazenadas dentro do banco de dados. Na autenticação (confirmando a identidade com nome de usuário e senha), o aplicativo decriptografará a senha criptografada armazenada no banco de dados e comparará com a senha fornecida pelo usuário para garantir a igualdade. Nesse tipo de abordagem de manipulação de senha, mesmo que alguém tenha acesso às tabelas do banco de dados, as senhas não serão simplesmente reutilizáveis. No entanto, há más notícias nessa abordagem também. Se, de alguma forma, alguém obtiver o algoritmo criptográfico junto com a chave usada pelo seu aplicativo, ele poderá visualizar todas as senhas de usuário armazenadas no banco de dados por decriptografia. "Essa é a melhor opção que eu tenho", um desenvolvedor de software pode gritar, mas existe uma maneira melhor?
Função hash criptográfica (somente de sentido único)
Sim, existe, pode ser que você tenha esquecido o ponto aqui. Você notou que não há necessidade de descriptografar e comparar? Se houver uma abordagem de conversão unidirecional, em que a senha possa ser convertida em alguma palavra convertida, mas a operação reversa (geração de senha a partir da palavra convertida) será impossível. Agora, mesmo que alguém obtenha acesso ao banco de dados, não há como as senhas serem reproduzidas ou extraídas usando as palavras convertidas. Nessa abordagem, dificilmente haverá alguém que saiba as senhas secretas dos usuários; e isso protegerá os usuários usando a mesma senha em vários aplicativos. Quais algoritmos podem ser usados para essa abordagem?