Oi,
A função criaSenhaCriptografada
que você compartilhou gera um hash da senha, mas não armazena a senha original.
Para validar uma senha plana, você precisa recriar o hash usando o mesmo salt
e comparar com o hash armazenado.
O problema é que o salt
é gerado aleatoriamente a cada execução da função criaSenhaCriptografada
, então não é possível validar a senha diretamente.
Para resolver isso, você precisa armazenar o salt
junto com o hash da senha.
Veja um exemplo de como fazer isso:
import crypto from "crypto";
export const criaSenhaCriptografada = (senha: string) => {
const salt = crypto.randomBytes(16).toString("hex");
const hash = crypto.createHmac("sha256", salt);
hash.update(senha);
const senhaCriptografada = hash.digest("hex");
return { salt, senhaCriptografada };
};
export const validaSenha = (senhaPlana: string, salt: string, senhaCriptografada: string) => {
const hash = crypto.createHmac("sha256", salt);
hash.update(senhaPlana);
const hashSenhaPlana = hash.digest("hex");
return hashSenhaPlana === senhaCriptografada;
};
// Exemplo de uso:
const { salt, senhaCriptografada } = criaSenhaCriptografada("minhaSenha123");
console.log("Senha criptografada:", senhaCriptografada);
console.log("Salt:", salt);
const senhaValida = validaSenha("minhaSenha123", salt, senhaCriptografada);
console.log("Senha válida:", senhaValida); // true
const senhaInvalida = validaSenha("senhaErrada", salt, senhaCriptografada);
console.log("Senha válida:", senhaInvalida); // false
Para saber mais: Documentação do módulo crypto do Node.js. Aqui você encontra detalhes sobre as funções de criptografia e hash.
Continue praticando e explorando novas soluções! 💪 🤔
Caso este post o tenha ajudado,
marque-o como solucionado ☑️.
Bons Estudos! 🤓