正在将byte[16]获取到uint32[4]



我正试图在C#中实现XTEA算法,我找到了一个函数来实现它

然而,我必须克服一个障碍。函数要求将数据和密钥放入UInt32数组中。

为了节省时间,我只发布与将密钥转换为可用格式相关的内容。

以下是我在C#伪代码中尝试做的事情:

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",我可以将其转换为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());

这应该做到…

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

最新更新