2016-11-17 68 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)] 
}