Node.jsencryptionPBKDF2函数在v8 vs v10上返回不同的值

该节点代码片段基于节点平台版本返回不同的值。 在运行Ubuntu 14.04的EC2中有两个相同的实例(节点版本除外)。

"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上 ,值是:

博伊+ I61 + rp2eEKoGEiQDT + 1I0D / LrZaLVgBnhFOdUhQ =

这是一个巨大的问题,因为我们正在升级应用程序的节点版本,密码不能正确解密。

谢谢!

在你寻求帮助之后,你很难find答案。

通过将编码types传递给Buffer函数,如下所示:

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

…我可以得到相同的散列。

控制台片段

事实certificate,默认的types已经从二进制变成了utf8,所以现在需要指定'binary'。 https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback (请参阅底部注释)