2013-12-13 25 views
12
var hex1 = "B1C85C061C98E713DEF0E2EDDDDB432738674C9F8962F09B75E943D55F9FB39F"; 
var hex2 = "121B0D3327A21B8048FC7CA6FD07AACC0D8DF59B99DB098686696573E3686E6C"; 

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

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

任何想法如何對十六進制值執行XOR運算?JavaScript中的兩個十六進制字符串的異或運算

回答

7

JavaScript中的按位操作僅適用於數值。

你應該在parseInt(hexString, 16)之前你的十六進制字符串。特別是在你的情況下,這是行不通的,因爲你的十六進制對於一個數字來說很大。您將不得不創建自己的自定義XOR函數。

看看這個鏈接:How to convert hex string into a bytes array, and a bytes array in the hex string?

生成的字節組將ellegible爲手動XOR。字節逐字節。也許這會幫助:Java XOR over two arrays

3
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':

"*)(" 
+1

不應'cli'是'str'? – Tieme

+0

是的,你是正確的鐵梅。我會改變。謝謝 :-) – ajaykools

1

可以使用這樣的函數。

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

相關問題