c# - 两个十六进制字节数组的 XOR 函数

标签 c# string hex logic xor

我正在尝试执行两个字节数组的异或运算,并将结果作为十六进制字符串返回。我已将两个字节数组转换为相应的二进制字符串。每个字节都有位,因为它有 8 个字节。

byte[] key =  { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };
byte[] PAN =  { 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23 };

到目前为止,我一直使用一种方法将字节数组转换为相应的二进制字符串值,例如“10101010101”。但是,当我执行以下方法来获取 XOR 时,我返回了一串笑脸,这可能是一些特殊的 ASCII 字符。

但是我不知道如何做到这一点。我正在考虑将二进制字符串转换为整数,但这不是一个好的解决方案,因为它不适合作为整数。

请问您有什么想法吗?可能有一些示例代码?

public static string exclusiveOR(string string_1, string string_2)
{
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < string_1.Length; i++)
        sb.Append((char)(string_1[i] ^ string_2[(i % string_2.Length)]));
        String result = sb.ToString();

        return result;
}

最佳答案

试试这个:

public static string exclusiveOR(byte[] key, byte[] PAN)
{
    if (key.Length == PAN.Length)
    {
        byte[] result = new byte[key.Length];
        for (int i = 0; i < key.Length; i++)
        {
            result[i] = (byte)(key[i] ^ PAN[i]);
        }
        string hex = BitConverter.ToString(result).Replace("-", "");
        return hex;
    }
    else
    {
        throw new ArgumentException();
    }
}

工作原理:首先检查数组的长度是否相同,如果是,则对数组执行异或运算。 BitConverter.ToString() 方法将字节数组转换为字符串,但是因为有连字符分隔每个十六进制数,所以可以使用Replace() 方法去除这些破折号。

关于c# - 两个十六进制字节数组的 XOR 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802857/

相关文章:

c# - 使用 C# Windows 8 应用启动/停止服务

c# - 通用与非通用重载调用

C# - 使用 CopyTo( ) 进行数组复制-帮助

string - 序列比对

c++ - (C++) 获取字符串的每个字符并将其放入数组并获取所述数组的大小?

android - 如何在 setBackgroundColor 函数中设置参数

c# - 如何在 .net 核心中使用 TimeZoneInfo.GetAdjustmentRules()?

javascript - 如何区分二进制和十六进制值

c - 十六进制计算器,使用 scanf 解析字符串

java - 如何以最少的编辑次数将一个字符串转换为另一个字符串?