我试图执行独占或两个字节数组并将结果作为十六进制字符串返回.我已将两个字节数组转换为相应的二进制字符串.每个字节都有位,因为它有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; }
ProgramFOX.. 7
试试这个:
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(); } }
这是如何工作的:首先检查数组是否具有相同的长度,如果是这种情况,您将对数组执行XOR操作.该BitConverter.ToString()
方法将字节数组转换为字符串,但由于有连字符分隔每个十六进制数,您可以使用该Replace()
方法删除这些破折号.
试试这个:
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(); } }
这是如何工作的:首先检查数组是否具有相同的长度,如果是这种情况,您将对数组执行XOR操作.该BitConverter.ToString()
方法将字节数组转换为字符串,但由于有连字符分隔每个十六进制数,您可以使用该Replace()
方法删除这些破折号.