JavaScript 中两个十六进制字符串的 XOR
XOR of two hex strings in JavaScript
var hex1 = "B1C85C061C98E713DEF0E2EDDDDB432738674C9F8962F09B75E943D55F9FB39F";
var hex2 = "121B0D3327A21B8048FC7CA6FD07AACC0D8DF59B99DB098686696573E3686E6C";
var result = hex1 ^ hex2; //XOR the values
console.log(result); // outputs: 0 which does not sound good.
任何想法如何对十六进制值执行异或运算?
JavaScript
中的按位操作仅适用于数值。
您应该在之前parseInt(hexString, 16)
十六进制字符串。特别是在您的情况下,这是行不通的,因为您的十六进制对于数字来说太大了。您必须创建自己的自定义 XOR 函数。
看看这个链接: 如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?
生成的字节数组对于手动 XOR 来说将是清晰的。逐字节。也许这会有所帮助:两个数组上的Java XOR。
如果你在 Nodejs 上,你可以将十六进制字符串转换为 Buffer
s,然后使用 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');
}
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' 的输出:
"*)("
您可以使用这样的函数。
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
下面是接受 2 个字符串的函数,如"041234FFFFFFFFFFFF"和"0000000709000003"(引脚块和卡块的典型示例(上述 2 个字符串的预期结果为 "041234F8F6FFFFFC">
function bitwiseXorHexString(pinBlock1, pinBlock2) {
var result = ''
for (let index = 0; index < 16; index++) {
const temp = (parseInt(pinBlock1.charAt(index), 16) ^ parseInt(pinBlock2.charAt(index), 16)).toString(16).toUpperCase()
result += temp
}
return result
}
注意:这是对固定长度为 16 的 xor 2 字符串进行的。您可以根据需要对其进行修改。
相关文章:
- 将十六进制字符串转换为字节数组
- JavaScript 中两个十六进制字符串的 XOR
- 在JavaScript/NodeJS中压缩十六进制字符串
- 不带编码的十六进制字符串
- 在 Javascript 中更轻松地处理十六进制字符串和十六进制值
- 从十六进制字符串中获取原始十六进制
- 实时颜色选择器 HSV 到十六进制字符串
- 如何将中文十六进制字符串解码为中文字符或JavaScript
- 在 JavaScript 中将原始图像的十六进制字符串转换为位图图像
- 用Javascript将大整数转换为十六进制字符串
- 将十六进制字符串转换为十六进制类型
- javascript中字节数组到十六进制字符串的转换
- ByteArray的十六进制字符串
- 如何从十六进制字符串构建二进制数组
- Meteor返回无效的十六进制字符串错误试图创建ObjectID
- 将十六进制字符串转换为javascript中的整数数组
- 相当于python's int('十六进制字符串',16)
- JavaScript中十六进制字符串到字节值的稳健转换
- 如何在js中将数字转换为十六进制字符串
- 如何将浮点数转换为JavaScript中的4byte十六进制字符串并返回