节点.jscrypto.pbkdf2Sync密码与python脚本不匹配

2024-10-03 19:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个mongodb服务器,它存储由此生成的密码节点.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脚本执行的,该脚本接受纯文本密码,并且应该重建节点.js. 我尝试使用django python模块中的hashlib和pbkdf2来实现这一点,但是结果不匹配。hashlib脚本是:

^{pr2}$

你有什么想法吗?在


Tags: 脚本密码returnif节点varcallbackjs
1条回答
网友
1楼 · 发布于 2024-10-03 19:29:46

在节点代码中,有以下内容:

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

这假设this.salt是一个Base64编码的包含salt的字符串。它随后被解码成Buffer。所以,salt是一个(二进制)缓冲区。在

在Python代码中,有以下内容:

^{pr2}$

它接受二进制字符串salt,并使用Base64对其进行编码。所以,salt是一个(Base64编码的)字符串。在

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

相反,在Python代码中使用以下命令:

salt = b'salt'

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

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

相关问题 更多 >