2013-12-13 12 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 işlemlerinin onaltılık değerler üzerinde nasıl gerçekleştirileceği hakkında herhangi bir fikir var mı?XOR'un iki onaltılık dizgeciğinin XOR'si

cevap

7

JavaScript'teki bit işlemleri yalnızca sayısal değerler üzerinde çalışır.

Daha önce onaltılı dizginiz parseInt(hexString, 16) olmalıdır. Özellikle sizin durumunuzda bu işe yaramaz çünkü sizin hexiniz bir sayı için büyüktür. Kendi özelleştirilmiş XOR işlevinizi oluşturmanız gerekir.

Bu bağlantıyı bir göz atın: How to convert hex string into a bytes array, and a bytes array in the hex string?

çıkan ByteArray manuel XOR için ellegible olacaktır. Bayt byte. Belki bu yardımcı olacaktır: Java XOR over two arrays. 'abc' dizesinin

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; 

Çıktı:

"*)(" 
+1

'' str' olması cli' gerekmez mi? – Tieme

+0

Evet, haklısınız Tieme. Değişeceğim. Teşekkürler :-) – ajaykools

1

Böyle bir işlev kullanabilirsiniz.

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); 
} 

Kaynak: https://github.com/czzarr/node-bitwise-xor