1

我正在尝试在 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”,我可以将它转换为 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());
4

1 回答 1

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

于 2015-04-12T17:50:18.733 回答