1

我需要使用一个字节数组(不可打印的字符)作为 RC4 加密的密钥。明文是一个字符串。似乎CryptoJS.RC4.encrypt只需要明文和密钥的字符串。我对么?如果没有,我如何encrypt()用字符串和字节数组调用?

4

1 回答 1

4

如果要从字节值列表中创建键值,最好的办法是使用十六进制编码器函数CryptoJS.enc.Hex.parse

CryptoJS.enc.Hex.parse('48656c6c6f2c20576f726c6421');

这会将您的输入字符串解析为两个字符对的列表,每个字符对描述一个字节值。在这种情况下,十六进制值将是48, 65, 6c, 6c,6f等。您可以将parse调用结果作为参数直接传递给 encrypt/decrypt 方法key。(结果是一个名为“ ”的 CryptoJS 类型WordArray,但您无需担心这种类型的机制;只需将其作为关键参数传入即可。)

如果要将数字数组转换为十六进制字符串,可以使用简单的循环轻松完成此操作,并且.toString(16)

var byteArr = [72, 101, 108, 108, 111, 44],
    str = "",
    byteVal;
for(var i=0; i<byteArr.length; i++) {
    byteVal = byteArr[i];
    if(byteVal < 16) { str += "0"; }
    str += byteVal.toString(16);
};
于 2015-07-20T18:30:30.343 回答