我正在尝试在C#中实现XTEA算法,并且我找到了一个为我做这个功能。
然而,我必须通过一个障碍。该函数需要将数据和密钥放入UInt32数组中。
为了时间的推移,我只会发布与将密钥转换为可用格式相关的内容。
这是我在C#psuedocode中尝试做的事情:
String keyStr = "foobar";
byte[] keyBytes = Encoding.ASCII.GetBytes(keyStr);
/* keyBytes = 66, 6F, 6F, 62, 61, 72 (obviously I need to pad it
out to be followed by i 00's, i = 16 - keyBytes.Length); */
UInt32[] keyArr = new UInt32[4];
keyArr[0] = keyBytes[0 to 3];
keyArr[1] = keyBytes[4 to 7];
我听说我需要使用Bitwise OR,或类似的东西,但我不完全确定它是如何工作的。我也听说过使用BitConverter.ToString,正确解析它,然后假设结果是一个字符串:“666F6F62”,我可以将THAT转换为其中一个uint32。但这似乎是草率/懒惰/低效。
在写这个问题时我也尝试了这个,也许它会澄清,即使它不起作用:
String keyStr = "foobar"
byte[] keyBytes = new byte[16];
Encoding.ASCII.GetBytes(keyStr).CopyTo(keyBytes, 0);
UInt32[] keyArr = new UInt32[4];
Buffer.BlockCopy(keyBytes, 0, keyArr[0], 0, 4);
Console.WriteLine("keyBytes[]: " + BitConverter.ToString(keyBytes));
Console.WriteLine(keyArr[0].ToString());
答案 0 :(得分:1)
应该这样做......
String keyStr = "foobar";
byte[] keyBytes = new byte[16];
Encoding.ASCII.GetBytes(keyStr).CopyTo(keyBytes, 0);
UInt32[] keyArr = new UInt32[4];
if (BitConverter.IsLittleEndian)
Array.Reverse(keyBytes);
for (int i = 0; i < 4; i++)
keyArr[i] = BitConverter.ToUInt32(keyBytes, i * 4);
改编自 - https://msdn.microsoft.com/en-us/library/bb384066.aspx