python(django)hashlib vs Nodejs crypto

imn*_*mns 10 python django hashlib node.js passport.js

我正在将Django站点移植到Node.js,我正在尝试在Node中重新实现Django set password方法.这是Django代码

from django.utils.crypto import (
    pbkdf2, get_random_string)

import hashlib

password = 'text1'
algorithm = "pbkdf2_sha256"
iterations = 10000
salt = 'p9Tkr6uqxKtf'
digest = hashlib.sha256
hash = pbkdf2(password, salt, iterations, digest=self.digest)
hash = hash.encode('base64').strip()
print "%s$%d$%s$%s" % (self.algorithm, iterations, salt, hash)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的Node.js代码:

var password = 'text1';
var hashed = crypto.createHash('sha256').update(password, 'utf8').digest();
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
crypto.pbkdf2(hashed, salt, iterations, 32, function(err, encodedPassword) {
    var newPass = new Buffer(encodedPassword).toString('base64');
    console.log(encodedPassword);

    // console.log(Buffer(encodedPassword, 'binary').toString('hex'));
    var finalPass = algorithm +'$'+ iterations +'$'+  salt +'$'+  newPass;
    console.log(finalPass);
});
Run Code Online (Sandbox Code Playgroud)

我在Node中的解决方案不会输出与Python/Django代码相同的结果.在这一点上,我几乎在我的头上,任何帮助都将非常感激.提前致谢.

pal*_*ind 6

这是使用pbkdf2-sha256的更好的解决方案:

var pbkdf2 = require('pbkdf2-sha256');
var password = 'text1';
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
var hashed = pbkdf2(password, new Buffer(salt), iterations, 32).toString('base64');
var finalPass = algorithm +'$'+ iterations +'$'+  salt +'$'+  hashed;
Run Code Online (Sandbox Code Playgroud)

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