2016-11-17 103 views
0

我不太方便与字节转换,所以我想确保我没有做任何危险。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”, “0a9782aa773bdafcd9cd259e95381ac9ab26d026fe6a3375a93dc6b2a69e7ac3”]

这里的底线是使用lodash。这看起来正确吗?

回答

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)] 
}