【发布时间】:2013-03-01 23:18:17
【问题描述】:
我正在将 Django 站点移植到 Node.js,并且我正在尝试在 Node.js 中重新实现 Django 设置密码方法。这是 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 中的解决方案不会输出与 Python / Django 代码相同的结果。在这一点上,我几乎无法自拔,任何帮助都将不胜感激。提前致谢。
【问题讨论】:
-
Node 使用 HMAC+SHA1,据我所知无法更改(而对于 Python,您可以使用
digest.sha1而不是digest.sha256,但我不确定是否这是你可以接受的)。 -
是的,我当前的密码是用 sha256 创建的。
-
cryptojs 支持带有 HMAC+SHA256 的 PBKDF2,但它仍然不会产生相同的结果。我认为 Django 使用自己的实现,但并不十分标准。
标签: python django node.js hashlib passport.js