2016-06-16 3 views
1

Этот фрагмент кода узла возвращает разные значения на основе версии платформы узла. У меня есть два идентичных экземпляра (кроме версии узла) в EC2, работающем под Ubuntu 14.04.Функция Node.js crypto PBKDF2 возвращает разные значения в v8 vs v10

"use strict"; 
var crypto = require("crypto"); 
crypto.pbkdf2("password", "salt", 1000, 32, function(err, derivedKey) { 
if (err) { 
console.error(err); 
} else { 
console.log(new Buffer(derivedKey).toString('base64')); 
} 
});  

На узле v0.8.28 значение консоли:

bsKIwr7Ci8KtfsKuwp3CnhDCqgYSJANPw61Iw5A/w4vCrcKWwotWAGfChFPCnVIU

На узле v0.10.5 значение:

Boi + i61 + rp2eEKoGEiQDT + 1I0D/LrZaLVgBnhFOdUhQ =

Th это огромная проблема, поскольку мы обновляем версию узла в приложении, и пароли не могут быть дешифрованы должным образом.

Спасибо!

ответ

3

Странно, как вы находите ответы после того, как попросите о помощи.

Пропуская тип кодировки функции буфера, как это:

console.log(new Buffer(derivedKey,'binary').toString('base64')); 

... Я могу получить тот же хэш.

console snippets

Оказывается, тип по умолчанию был изменен из двоичного в utf8, так что «двоичный» должно быть указано в настоящее время. https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback (см. Нижние примечания)

Смежные вопросы