对于散列密码,我使用了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. 但结果是不同的。密码已设置。
因为盐已经在哈希中。这里是:
cXdlcnR5dWlvcGFzZGZnaA。PS
Buffer在 Node.JS 中它是一个全局对象,所以你可以省略它require。