Dav*_*och 2 openssl cryptography pbkdf2 node.js cryptojs
我正在将我的 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!
});
Run Code Online (Sandbox Code Playgroud)
我注意到的一件事是nodeCryptoKey最终是32字符长,并且 cryptoJSKey 是192. 如果我将keySizefor only 节点的crypto版本增加到144( keySize * 6) 键最终也是192字符长 - 尽管它仍然不同。
我做错了什么还是实现方式彼此不同?
看来我想通了。
在“CryptoJS v3.0.2.zip”(当前下载)中卷起的PBKDF2.js脚本CryptoJS.enc.Base64是undefined;这可能是有意的,但不是我注意到的。
我正在将节点的 Base64 编码输出与 CryptoJS 的十六进制输出进行比较。
另一个警告是密钥大小在 CryptoJS 和 node.js 之间不兼容。节点需要keySize * 4以输出相同的密钥。在这两种情况下,我都不熟悉引擎盖下发生的事情。但我只是假设这是有意的。
Node.js 的 PBKDF2 文档非常少;然而,它确实说它的“key”参数被命名为keylen,它以字节为单位(或者是位?我不确定)。
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |