小编The*_*ero的帖子

Nodejs crypto.pbkdf2结果与CryptoJS.PBKDF2不同

我在前端(CryptoJS)和后端(Node.js)上使用PBKDF2,导出的密钥必须相等所以,我使用相同的盐,相同的算法,相同的迭代次数,相同的密码,但派生的密钥是不同.

这是Browser/cryptoJS代码,用于评论样本盐和密钥.(十六进制)

<script type="text/javascript" src="pbkdf2.js"></script>
<script type="text/javascript" src="sha512.js"></script>
<script>
var salt = CryptoJS.lib.WordArray.random(128 / 8);
var key512Bits = CryptoJS.PBKDF2('anacleto', salt, { hasher:CryptoJS.algo.SHA512, keySize: 512 / 32, iterations: 1 });
console.log(salt.toString(CryptoJS.enc.Hex));
// 1427f23fd32f8f9902768e7ab7c7ffad
console.log(key512Bits.toString(CryptoJS.enc.Hex));
// de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25
</script>
Run Code Online (Sandbox Code Playgroud)

这是nodeJS代码

var crypto = require('crypto');
var salt_hex = '1427f23fd32f8f9902768e7ab7c7ffad';
var key_hex = 'de3259de39fcc55531b91b4ffb2a6c29005c674cc95b3ec5bdf18412b6087d05921f3a0e4148fc34c88a04e980481d397a4c2b143edc0cb1bb5d7434ca3b4c25';
var salt = new Buffer(salt_hex, 'hex');
crypto.pbkdf2('anacleto', salt.toString('utf8'), 1, 512/8, 'sha512', function (err, key) {
  if (err)
    throw err;
  var x = key.toString('hex');
  var y = key_hex;
  console.assert(x === y, '\n' …
Run Code Online (Sandbox Code Playgroud)

javascript cryptography pbkdf2 node.js cryptojs

5
推荐指数
1
解决办法
2249
查看次数

标签 统计

cryptography ×1

cryptojs ×1

javascript ×1

node.js ×1

pbkdf2 ×1