Тема: Нащо потрібна сіль при хешуванні?
Вітаю. Хотів був використати алгоритм хешувення argon2 для хешування паролю, і знайшов приклад, де генерується та використовується при хашуванні випадкова сіль.
function getPass(password1: string) {
crypto.randomBytes(32, function (err, salt) {
if (err) throw Error();
argon2i.hash(password1, salt).then((hash) => {
console.log(hash, salt.toString(`hex`));
});
});
}
async function checkPass(
hash: string,
salt: string,
password: string
): Promise<boolean> {
return argon2i.verify(hash, password);
}
const salt = `5b9fb0de1f19008ec5e1870ec410006660bed269df2eddb39f52c8c1f5851b7f`;
const hash = `$argon2i$v=19$m=4096,t=3,p=1$W5+w3h8ZAI7F4YcOxBAAZmC+0mnfLt2zn1LIwfWFG38$ZYbs6HY9VNl3hIEThohNi18hKFiyej1c1KYmLZTJ6Sc`;
// getPass(`password`);
(async () => console.log(await checkPass(hash, salt, `password`)))();
Я думав, що сіль додається до пароля при хешуванні, аби хешувався не сам пароль, а пароль + випадкова сіль, але ж тоді, аби перевірити, чи хеш відповідає певному паролю, нам потрібно десь зберігати ту сіль, аби при перевірці додавати її до пароля?
В моєму кодові та сіль ніде явно не зберігається, і кожен раз вона різна, але верифікація того хешу та пароля проходе успішно, хоча при верифікації я ніде не використовую сіль, як таке може бути?