JavaScript中两个十六进制字符串的XOR

the*_*fox 13 javascript

var hex1 = "B1C85C061C98E713DEF0E2EDDDDB432738674C9F8962F09B75E943D55F9FB39F";
var hex2 = "121B0D3327A21B8048FC7CA6FD07AACC0D8DF59B99DB098686696573E3686E6C";

var result = hex1 ^ hex2; //XOR the values

console.log(result); // outputs: 0 which does not sound good.
Run Code Online (Sandbox Code Playgroud)

有关如何对十六进制值执行XOR运算的任何想法?

sec*_*e12 9

如果您使用 Nodejs,则可以将十六进制字符串转换为Buffers,然后用于map构建结果字符串。

function xor(hex1, hex2) {
  const buf1 = Buffer.from(hex1, 'hex');
  const buf2 = Buffer.from(hex2, 'hex');
  const bufResult = buf1.map((b, i) => b ^ buf2[i]);
  return bufResult.toString('hex');
}
Run Code Online (Sandbox Code Playgroud)


And*_*ena 8

JavaScript中的按位运算仅适用于数值.

parseInt(hexString, 16)之前应该使用十六进制字符串 特别是在你的情况下,这不起作用,因为你的十六进制对于一个数字是大的.您必须创建自己的自定义XOR功能.

看一下这个链接:如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?

对于手动XOR,生成的bytearray将易于识别.按字节字节.也许这会有所帮助:Java XOR超过两个数组.


aja*_*ols 5

str = 'abc';
c = '';
key = 'K';
for(i=0; i<str.length; i++) {
    c += String.fromCharCode(str[i].charCodeAt(0).toString(10) ^ key.charCodeAt(0).toString(10)); // XORing with letter 'K'
}
return c;
Run Code Online (Sandbox Code Playgroud)

字符串' abc '的输出:

"*)("
Run Code Online (Sandbox Code Playgroud)