我完全不知道这里发生了什么。
我正在为教育目的创建一个加密算法。
这是我的代码的开头:
public static byte[] encrypt(byte[] block, byte[] cipher_key)
{
List<byte[]> debug_states = new List<byte[]>();
List<byte[,,]> debug_cubes = new List<byte[,,]>();
List<byte[]> debug_keys = new List<byte[]>();
byte[] extended_key = KeyScheduler.GetExtendedKey(cipher_key);
byte[] state = new byte[512];
byte[] key = new byte[512];
byte[,,] state_cube = new byte[8, 8, 8];
debug_states.Add(state);
debug_cubes.Add(state_cube);
debug_keys.Add(key);
for (short a = 0; a < 512; a++)
{
state[a] = (byte)(block[a] ^ cipher_key[a]);
}
for (short r = 0; r < 32; r++)
{
short i = 0;
debug_states.Add(state);
debug_cubes.Add(state_cube);
debug_keys.Add(key);
for (i = 0; i < 512; i++) {
key[i] = (byte)extended_key[(r * 512) + i];
}
if (r == 2) { throw new Exception(); }
此后不久,当我抛出异常以检查变量时,它们都没有任何意义。例如,从我第一次将状态添加到 debug_states 列表时,它应该全为零,但 Visual Studio 却说它是 180,155,126,217 ......状态多维数据集也会发生同样的事情。更奇怪的是,这些值不能是随机的,因为每次运行程序时它们都是相同的,但我完全不知道它们来自哪里。extended_key 确实获得了正确的值,但仍然无法正常工作,请参阅下一段。
此外,以后每次我尝试更改其中一个变量时,它们都不会改变!在我的代码中再往下,有一个 for 循环可以多次更改状态、状态多维数据集和键,并每次都记录它们,但在每个调试条目中它们总是相同的。
到底是怎么回事???