gpt4 book ai didi

javascript - Node.js crypto.pbkdf2Sync 密码与 python 脚本不匹配

转载 作者:行者123 更新时间:2023-12-03 06:40:57 29 4
gpt4 key购买 nike

我有一个 mongodb 服务器,用于存储此 node.js 代码生成的密码:

encryptPassword(password, callback) {
if (!password || !this.salt) {
return null;
}

var defaultIterations = 10000;
var defaultKeyLength = 64;
var salt = new Buffer(this.salt, 'base64');

if (!callback) {
return crypto.pbkdf2Sync(password, salt, defaultIterations, defaultKeyLength)
.toString('base64');
}

return crypto.pbkdf2(password, salt, defaultIterations, defaultKeyLength, (err, key) => {
if (err) {
callback(err);
} else {
callback(null, key.toString('base64'));
}
});
}

但是身份验证阶段是由 python 脚本执行的,该脚本采用纯文本密码,并且应该重建与 node.js 相同的密码。我试图使用 django python 模块中的 hashlib 和 pbkdf2 来做到这一点,但结果不匹配。 hashlib 脚本是:

salt = base64.b64encode(b'salt') 
hashedPassword = hashlib.pbkdf2_hmac('sha1', b'password', salt, 10000, 64)
encodedPassword = base64.b64encode(res)

你有什么想法吗?

最佳答案

在您的 Node 代码中,您有以下内容:

var salt = new Buffer(this.salt, 'base64');

这假设 this.salt 是包含 salt 的 Base64 编码 字符串。随后将其解码到Buffer中。因此,salt 是一个(二进制)缓冲区。

在你的Python代码中,你有这样的:

salt = base64.b64encode(b'salt') 

这采用二进制字符串salt 并对其进行 Base64 编码。因此,salt 是一个(Base64 编码的)字符串。

注意到 Node(二进制缓冲区)和 Python(Base64 编码字符串)之间的类型不匹配吗?

相反,请在您的 Python 代码中使用它:

salt = b'salt'

或者允许 Python 代码将 Base64 编码的字符串作为盐,并对其进行解码:

salt = base64.b64decode('c2FsdA==')

关于javascript - Node.js crypto.pbkdf2Sync 密码与 python 脚本不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37963116/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com