Не могу разобраться, в чем соль?

Для хеширования паролей заюзал пакет 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-ить.

→ Ссылка