Почему хэш сравнивает результаты true даже без параметра соли? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую bcrypt-nodejs для генерации хеша в моем приложении node.js, например:

           var complete_string = "login" + "user@gmail.com";
           var salt = "89Uhfdsua8aHK";
           var hash = bcrypt.hashSync(complete_string, salt);

Затем я пытаюсь проверить правильность хеша из этой строки, используя:

           bcrypt.compareSync(complete_string, hash)); // true

Но почему функция compareSync выводит true, хотя я не даю ей никакого параметра salt?

1 Ответ

0 голосов
/ 13 декабря 2018

Если вы проверите hash, вы заметите, что hashSync() добавляет соль к выходу:

const bcrypt = require('bcrypt-nodejs');
const complete_string = "login" + "user@gmail.com";
const salt = bcrypt.genSaltSync(2);
console.log("salt: " + salt);
const hash = bcrypt.hashSync(complete_string, salt);
console.log("hash: " + hash);
console.log("compare: " + bcrypt.compareSync(complete_string, hash));

Выходы:

salt: $2a$10$k/a9i/zMGnzx5VKjmhXySO
hash: $2a$10$k/a9i/zMGnzx5VKjmhXySO.sx6fcIPsdbej1pVVcKLy9TbNK.2aLm
compare: true

Обычно для хранениясоль с хэшированным значением именно по этой причине, так что можно проверить хэш позже, не передавая соль как отдельное значение.Библиотека bcrypt как раз делает это для вас.

...