我正在将我的 node.js 应用程序的哈希算法从基于 JS 的CryptoJS实现切换到节点自己的加密实现。
这是我的实现:
var password = "password1";
var salt = generateSalt();
var iterations = 4000;
var keySize = 768/32;
var cryptoJSKey = CryptoJS.PBKDF2(password, salt, { "iterations": iterations , "keySize": keySize });
// base64 encoded key
cryptoJSKey = cryptoJSKey.toString(CryptoJS.enc.Base64);
require("crypto").pbkdf2( password, salt, iterations, keySize, function(err, derivedKey){
var nodeCryptoKey = new Buffer( derivedKey, "binary" ).toString( "base64" );
console.log( cryptoJSKey == nodeCryptoKey ); // always false!
});
我注意到的一件事是nodeCryptoKey
最终成为32
字符长并且 cryptoJSKey 是192
. 如果我将keySize
for only 节点的crypto
版本增加到144
( keySize * 6
),则密钥最终192
也会变成字符长 - 尽管它仍然不同。
我做错了什么还是实现方式彼此不同?