Не могу разобраться, в чем соль?
Для хеширования паролей заюзал пакет argon2.
Для тестов написал вот такой код
const argon2 = require('argon2');
const { Buffer } = require('buffer');
const pass = 'password'
const passList = ['qwerty', 'password','zzzz' ]
async function main() {
let salt = Buffer.from('qwertyuiopasdfgh');
const hash = await argon2.hash(pass, { salt }); // $argon2i$v=19$m=4096,t=3,p=1$cXdlcnR5dWlvcGFzZGZnaA$bVkS9BbKvWp8zwR0G3Ft3u8qT3vcAbe7EDjJXxxyI1M
for (const passItem of passList) {
const result = await argon2.verify(hash, passItem) // false, true, false
}
}
main()
Как видно, в метод verify, я передаю только лишь пароль и его хэш, который может утекти. Никакой соли туда не добавляю. При переборе списка паролей, ожидаю увидеть три false. Но результат другой. Пароль установлен.
Код написан по мотивам доки https://github.com/ranisalt/node-argon2
Ответы (1 шт):
Автор решения: Alexey Ten
→ Ссылка
Потому что соль уже в хеше. Вот она: cXdlcnR5dWlvcGFzZGZnaA.
> Buffer.from('qwertyuiopasdfgh').toString('base64')
'cXdlcnR5dWlvcGFzZGZnaA=='
P.S. Buffer в Node.JS это глобальный объект, так что его можно не require-ить.