我对字节转换不太方便,所以我想确保我没有做任何危险的事情。
我只是使用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。这看起来不错吗?
答案 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)]
}