Django pbkdf2_sha256 JS实现

SoW*_*oWa 9 javascript sha256 django-authentication pbkdf2

我有一个来自django的数据库,我想从Node.js使用它.我有一个任务:验证用户身份.从数据库中已知:算法pbkdf2_sha256,salt,10000次迭代和base64编码的哈希.我必须在JS中执行哪些步骤来将某些密码编码为给定的base64-hash?

UPD:在这里找到解决方案:python(django)hashlib vs Nodejs crypto 但是Django生成的hash和JS生成的hash不匹配...
Django生成下一个:

pbkdf2_sha256$10000$NmzpPCQiTe2R$U8ipSsOy3Xz7FwWDHdH/dTei8Xh4Q7NGtdzrCacSfvo=
Run Code Online (Sandbox Code Playgroud)

JS:

pbkdf2_sha256$10000$NmzpPCQiTe2R$w4jCgWjDilrDmcOBd8K+I8OdwpkKwoVQZMKWH3FvYcKoAMKcwqlewobDocOEGMKZfQ==
Run Code Online (Sandbox Code Playgroud)

密码: Simple123

pal*_*ind 8

通过使用pbkdf2-sha256(来自您自己的链接),我能够生成一个与Django相同的哈希值.

var pbkdf2 = require('pbkdf2-sha256');
var validatePassword = function (key, string) {
    var parts = string.split('$');
    var iterations = parts[1];
    var salt = parts[2];
    return pbkdf2(key, new Buffer(salt), iterations, 32).toString('base64') === parts[3];
};
var djangoPass = 'pbkdf2_sha256$10000$NmzpPCQiTe2R$U8ipSsOy3Xz7FwWDHdH/dTei8Xh4Q7NGtdzrCacSfvo=';
console.log(validatePassword('Simple123', djangoPass)); // Logs: true
Run Code Online (Sandbox Code Playgroud)

上面的代码应该足以使用Node验证存储在Django中的密码.