CryptoJS将字数组分成两部分

时间:2016-11-17 17:20:14

标签: javascript byte cryptojs

我对字节转换不太方便,所以我想确保我没有做任何危险的事情。

我只是使用CryptoJS pbkdf2生成512位密钥。

然后,我想将此密钥分成两半以生成两个256位密钥。

generateKeyPair = function(input, salt) {
     var output = CryptoJS.PBKDF2(input, salt, { keySize: 512/32 });

     var firstHalf = _.clone(output);
     var secondHalf = _.clone(output);
     var sigBytes = output.sigBytes/2;

     firstHalf.words = output.words.slice(0, 10);
     secondHalf.words = output.words.slice(10, 20);
     firstHalf.sigBytes = sigBytes;
     secondHalf.sigBytes = sigBytes;

     return [firstHalf.toString(), secondHalf.toString()];
   }

我为generateKeyPair("hello", "world")获得的输出是:

  

[" 798ef2617367d80daeacf8b457af7903eebf6d1f384c9fed762b14186036e912&#34 ;,   " 0a9782aa773bdafcd9cd259e95381ac9ab26d026fe6a3375a93dc6b2a69e7ac3"]

这里的下划线是使用lodash。这看起来不错吗?

1 个答案:

答案 0 :(得分:0)

你的解决方案似乎很好。我最近通过将十六进制字符串分成两半来解决了这个问题。我的示例采用WordArray格式的密钥,并以WordArray格式返回每一半。

function splitKey(key) {
    const keyString = key.toString()
    const firstHalf = keyString.slice(0,keyString.length/2)
    const secondHalf = keyString.slice(keyString.length/2,keyString.length)

    return [CryptoJS.enc.Hex.parse(firstHalf), CryptoJS.enc.Hex.parse(secondHalf)]
}