Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como comparar a senha inserida pelo usuário no login com a senha armazenada no BD se o resultado do salta sempre muda?

Boa noite.

O texto diz: " O salt é gerado toda vez que chamamos 'bcrypt.hash`, por isso o resultado sempre muda" e que: "Assim, por causa desse formato, o bcrypt consegue recuperar as informações necessárias para comparar a senha recebida do cliente com a senhaHash do seu usuário, guardada no banco de dados."

Não entendi como o bcrypt consegue comparar a senha recebida do cliente com a senhaHash do seu usuário se o salt é gerado toda vez que chamamos o 'brcypt.has' e o resultado sempre muda.

2 respostas
solução!

Digamos que temos isso:

senha: senha123
salt: salt456 (gerado randomicamente)

Bcrypt vai criar um hash da sua senha utilizando o salt com uma funcao do tipo:

hashSenha = gerarHashSenha(salt, senha)

Digamos q o resultado de hashSenha seja #@$$%^$. No banco, será armazenado a senha hasheada e o salt :

salt456#@$$%^$

Quando for fazer o login, para fazer a comparação extrai-se o salt para aplicar aquela função de hashear gerarHashSenha() mas agora com o dado da senha pego do formulário de login. Então se compara esse resultado com aquela senha hasheada do banco.

Veja que como é hash não é necessário descriptografar, apenas gerar novamente a senha hasheada utilizando o mesmo salt e comparar com o que está salvo no banco de dados para autenticar o usuário.

No registro do banco tb tem informações da versão do bcrypt e os rounds, além das posições do salt e da senha hasheada serem pré-definidas para que o algoritmo de extração desses dados consigam identificar o que é senha e o que é salt.

Muito obrigado Rodrigo.