CSharp · Console
using System;
using System.Linq;
namespace HexXor
{
public class HexString
{
private byte[] _data;
public HexString(string data)
{
if ((data.Length & 1)!= 0) throw new ArgumentException("Hex string must have an even number of digits.");
_data = Enumerable.Range(0, data.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(data.Substring(x, 2), 16))
.ToArray();
}
public HexString(byte[] data)
{
_data = data;
}
public override string ToString()
{
string hex = BitConverter.ToString(_data);
return hex.Replace("-","");
}
static public HexString operator ^(HexString LHS, HexString RHS)
{
return new HexString
(
LHS._data.Zip
(
RHS._data,
(a, b) => (byte)(a ^ b)
)
.ToArray()
);
}
}
public class Program
{
static public void Main()
{
HexString bdk1 = new HexString("8D10DA193E98524379264ADFFD043632");
HexString bdk2 = new HexString("8C339F7EB7339FAC87FAF0478B500422");
const string expected = "0123456789ABCDEFFEDCBA9876543210";
HexString actual = bdk1 ^ bdk2;
Console.WriteLine("Expected: " + expected);
Console.WriteLine("Actual : " + actual);
Console.ReadLine();
}
}
}