Подтвердить что ты не робот

XOR двух шестнадцатеричных строк в JavaScript

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

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

console.log(result); // outputs: 0 which does not sound good.

Любые идеи о том, как выполнять операции XOR по шестнадцатеричным значениям?

4b9b3361

Ответ 1

Побитовые операции в JavaScript работают только с числовыми значениями.

Вы должны parseInt(hexString, 16) использовать шестую строку раньше. В частности, в вашем случае это не сработает, потому что ваш гексагон будет большим для числа. Вам нужно будет создать свою собственную функцию XOR.

Посмотрите на эту ссылку: Как преобразовать шестнадцатеричную строку в массив байтов и массив байтов в шестнадцатеричной строке?

Полученный bytearray будет доступен для руководства XOR. Байт по байт. Возможно, это поможет: Java XOR над двумя массивами.

Ответ 2

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;

Вывод строки ' abc':

"*)("

Ответ 3

Вы можете использовать такую ​​функцию.

function xor(a, b) {
  if (!Buffer.isBuffer(a)) a = new Buffer(a)
  if (!Buffer.isBuffer(b)) b = new Buffer(b)
  var res = []
  if (a.length > b.length) {
    for (var i = 0; i < b.length; i++) {
       res.push(a[i] ^ b[i])
    }
 } else {
 for (var i = 0; i < a.length; i++) {
   res.push(a[i] ^ b[i])
   }
 }
 return new Buffer(res);
}

Источник: https://github.com/czzarr/node-bitwise-xor