Python 的 pbkdf2_sha256.verify 的 NodeJS 实现

Ale*_*der 6 python cryptography sha256 pbkdf2 node.js

我必须将这个 Python 代码翻译为 NodeJS:

from passlib.hash import pbkdf2_sha256
pbkdf2_sha256.verify('12345678', '$pbkdf2-sha256$2000$8R7jHOOcs7YWImRM6V1LqQ$CIdNv8YlLlCZfeFJihZs7eQxBsauvVfV05v07Ca2Yzg')
>> True
Run Code Online (Sandbox Code Playgroud)

上面的代码是完整的代码,即没有其他参数/​​设置(只需pip install passlib在运行它来安装passlib包之前运行)。

我正在寻找validatePasswordNode 中函数的正确实现,它将通过这个积极的实现测试:

validatePassword('12345678', '$pbkdf2-sha256$2000$8R7jHOOcs7YWImRM6V1LqQ$CIdNv8YlLlCZfeFJihZs7eQxBsauvVfV05v07Ca2Yzg')
>> true
Run Code Online (Sandbox Code Playgroud)

这是passlib.hash.pbkdf2_sha256 及其默认参数值的文档。

我尝试使用上面的 Python 代码中的数据来遵循此处的答案,但该解决方案没有通过测试。

我希望获得有关此实现的一些帮助(最好使用内置 NodeJScrypto包)。

先感谢您。

sha*_*vi2 4

这会起作用:

const crypto = require('crypto')
function validatePassword(secret, format) {
    let parts = format.split('$')
    return parts[4] == crypto.pbkdf2Sync(secret, Buffer.from(parts[3].replace(/\./g, '+') + '='.repeat(parts[3].length % 3), 'base64'),
        +parts[2], 32, parts[1].split('-')[1]).toString('base64').replace(/=/g, '').replace(/\+/g, '.')
}
Run Code Online (Sandbox Code Playgroud)