gpt4 book ai didi

c# - 在 C# 中将一维数组转换为二维数组以获取 AES 数据矩阵

转载 作者:行者123 更新时间:2023-11-30 14:28:28 25 4
gpt4 key购买 nike

我正在尝试从一维数组创建一个二维数组,以在 Rijndael 或 AES 加密过程中创建数据状态。我一直在尝试在这里使用这段代码;

public byte[,] MakeAState(byte[] block){
byte[,] State;

foreach (byte i in block)
for (int row = 0; row < 4; row++)
for (int column = 0; column < 4; column++)
State[column, row] = i;

return State;
}

我打算让结果变成这样

//Original Sequence
[99 111 98 97 112 97 115 115 99 111 98 97 112 97 115 115]

//Desired Sequence
[99 112 99 112]
[111 97 111 97]
[98 115 98 115]
[97 115 97 115]

结果总是出来,好像 Block 的元素用作 State 数组的索引,导致出现“越界”错误消息。关于如何管理这个的任何想法?

最佳答案

这应该是你想要的,它与除法和模运算一起确定列和行(如果你想转动矩阵,只需将“i % 4”切换为“i/4”):

class Program
{
static void Main(string[] args)
{
byte[] original = new byte[] { 99, 111, 98, 97, 112, 97, 115, 115, 99, 111, 98, 97, 112, 97, 115, 115 };
byte[,] result = MakeAState(original);

for (int row = 0; row < 4; row++)
{
for (int column = 0; column < 4; column++)
{
Console.Write(result[row,column] + " ");
}
Console.WriteLine();
}


}

public static byte[,] MakeAState(byte[] block)
{
if (block.Length < 16)
{
return null;
}

byte[,] state = new byte[4,4];

for (int i = 0; i < 16; i++)
{
state[i % 4, i / 4] = block[i];
}

return state;
}
}

输出:

99 112 99 112

111 97 111 97

98 115 98 115

97 115 97 115

关于c# - 在 C# 中将一维数组转换为二维数组以获取 AES 数据矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29608066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com