Do github :
Para hash uma senha:
var bcrypt = require('bcrypt');
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});
});
Para verificar uma senha:
// Load hash from your password DB.
bcrypt.compare("B4c0/\/", hash, function(err, res) {
// res == true
});
bcrypt.compare("not_bacon", hash, function(err, res) {
// res = false
});
De cima, como pode não haver valores de sal envolvidos nas comparações? O que estou perdendo aqui?
column_password = hash, column_salt = salt
vscolumn_password = hash_salt
. o invasor ainda tem as mesmas informações. O ponto importante é tornar cada senha tão aleatória e maior que se torne improvável que alguém a tenha pré-computado.Eu também tive a mesma pergunta que o pôster original e dei uma olhada em volta e tentei coisas diferentes para entender o mecanismo. Como já foi apontado por outros, o sal é concatenado ao hash final. Portanto, isso significa algumas coisas:
Essas duas coisas são geralmente codificadas na implementação, por exemplo, a fonte de implementação bcrypt para bcryptjs define o comprimento do sal como 16
Portanto, para ilustrar o conceito básico por trás da ideia, se alguém quisesse fazê-lo manualmente, seria semelhante ao seguinte. Eu não recomendo implementar coisas como essa você mesmo, quando houver bibliotecas que você possa obter para fazê-lo.
fonte
Porque eu mesmo fiz a mesma pergunta, sei exatamente o que você está pensando.
Você tem um equívoco entre "Chave Secreta", que é usada na Criptografia algoritmos , e "Sal", que é usada para desacelerar o processo de criptografia e tornar mais difícil para os hackers usarem a força bruta.
Quando você usa a senha simples e o salt para gerar o hash, esse hash usa como chave secreta a própria senha ! Portanto, da próxima vez que você tentar compará-la com uma senha simples, esta senha simples deve ser exatamente a mesma que você usou para gerar o hash! Portanto, é por isso que você não precisa armazená-lo em outro lugar, pois ele é sempre fornecido pelo usuário nas etapas de registro e login!
fonte