CryptoJS将单词数组分成两部分

CryptoJS splitting word array in two

本文关键字:两部分 数组 单词 CryptoJS      更新时间:2023-09-26

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

我只是使用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")的输出是:

("798"ef2617367d80daeacf8b457af7903eebf6d1f384c9fed762b14186036e912

,"0 a9782aa773bdafcd9cd259e95381ac9ab26d026fe6a3375a93dc6b2a69e7ac3"

这里的下划线使用lodash。这看起来对吗?

你的解决方案似乎不错。我最近解决了这个问题,只是把十六进制字符串分成两半。我的例子以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)]
}