将字节[16]送到uint32 [4]

时间:2015-04-12 17:17:37

标签: c# arrays bytearray uint32 xtea

我正在尝试在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());

1 个答案:

答案 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