python(django)hashlib vs Nodejsencryption

我正在通过Django站点移植到Node.js,我试图在Node中重新实现Django set密码方法。 这是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) 

这里是我到目前为止的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); }); 

我在Node中的解决scheme不会输出与Python / Django代码相同的结果。 在这一点上,我已经非常头脑,任何帮助将非常感激。 提前致谢。

这是一个更好的解决scheme,使用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; 

上面的代码应该足以validation使用Node存储在Django中的密码。

所以我的解决scheme是创build一个python脚本,它接受salt和用户密码并返回散列的密码。 我从节点调用这个脚本并parsing结果。 我检查散列密码是否以pbkdf2_sha256开始,然后根据python脚本的返回值进行validation,如果validation使用我的新系统哈希函数重置密码。

改用pbkdf2-sha256 。 如果你正在处理完全相同的问题(Django – > NodeJS),那对我来说就是诡计了! 🙂

根据bababa的回答,我的方法是创build一个Python脚本以及使用

“从django.contrib.auth导入哈希”

函数hashers.check_password()和hashers.make_password()提供validation或创buildDjango安装密码所需的function。

有关此function的更多文档可以在https://docs.djangoproject.com/en/1.5/topics/auth/passwords/上find