簡體   English   中英

Node.js crypto.pbkdf2Sync密碼與python腳本不匹配

[英]Node.js crypto.pbkdf2Sync password does not match with python script

我有一個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'));
      }
   });
}

但是身份驗證階段是由采用純文本密碼並應重建與node.js相同密碼的python腳本執行的。 我正在嘗試使用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進行解碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM