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运算的任何想法?
如果您使用 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)
JavaScript中的按位运算仅适用于数值.
你parseInt(hexString, 16)之前应该使用十六进制字符串 特别是在你的情况下,这不起作用,因为你的十六进制对于一个数字是大的.您必须创建自己的自定义XOR功能.
看一下这个链接:如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?
对于手动XOR,生成的bytearray将易于识别.按字节字节.也许这会有所帮助:Java XOR超过两个数组.
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)