C AES查找表的实现

C AES查找表的实现,c,encryption,aes,C,Encryption,Aes,我试图在AES加密(Rijndael)中实现查找表。公式如下(): 我的代码是(仅适用于一轮): (j=0;j16; 输入[2][j]=xRoperation>>8; 输入[3][j]=xorOperation; } 问题是: 我的代码是否完全映射了公式?因为当我用某个密钥对纯文本进行加密时,我没有得到预期的密码。我已经找出了代码中的错误…:) 我将输入用作影响结果的输出。。我所做的一切就是使用另一个数组作为输出,然后在循环结束后将结果复制回输入 感谢大家与我一起尝试……要创建AES查找表,

我试图在AES加密(Rijndael)中实现查找表。公式如下():

我的代码是(仅适用于一轮):

(j=0;j<4;++j)的

{
无符号整型;
xRoperation=T_0_enc_2[输入[0][j]]
^T_1_enc_2[输入[1][(j-C1)%Nb]///Nb=4,C1=1,C2=2,C3=3
^T_2_enc_2[输入[2][(j-C2)%Nb]]
^T_3_enc_2[输入[3][(j-C3)%Nb];
(w[0][j+(Nb*(i+1))]>16;
输入[2][j]=xRoperation>>8;
输入[3][j]=xorOperation;
}
问题是:


我的代码是否完全映射了公式?因为当我用某个密钥对纯文本进行加密时,我没有得到预期的密码。

我已经找出了代码中的错误…:)

我将输入用作影响结果的输出。。我所做的一切就是使用另一个数组作为输出,然后在循环结束后将结果复制回输入


感谢大家与我一起尝试……

要创建AES查找表,必须将上述代码应用于每个字节256个输入状态。

欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。如果您的代码工作正常,为什么要问我们?输入[]数组的类型是什么?如何声明?如果
j
C1
都是无符号int,那么
j-C1
可能是溢出,而
(j-C1)%Nb
可能是错误的。你觉得可能吗?如果添加多个Nb,会发生什么?你能试试像
(j+(C1*Nb-C1))%Nb
这样的东西吗?@francis问了一个关于
j
类型的好问题。只有当
j
被签名时,才可能影响结果。在这种情况下,索引值可能为负值。对于无符号类型,溢出会给出预期结果,因为
Nb=4
。无论如何,最好使用保护添加
Nb
(j+Nb-C)%Nb
for(j = 0; j < 4; ++j)
    {
        unsigned int xorOperation;
        xorOperation  = T_0_enc_2[input[0][j]]
                      ^ T_1_enc_2[input[1][(j-C1) % Nb]] // Nb = 4, C1 = 1, C2 = 2, C3 = 3
                      ^ T_2_enc_2[input[2][(j-C2) % Nb]]
                      ^ T_3_enc_2[input[3][(j-C3) % Nb]];

        xorOperation ^= (w[0][j + (Nb * (i+1))] <<  24)  // w[x] is the key array, (i+1) is the round number
                      | (w[1][j + (Nb * (i+1))] <<  16)
                      | (w[2][j + (Nb * (i+1))] <<   8)
                      | (w[3][j + (Nb * (i+1))]);

        input[0][j] = xorOperation >> 24;
        input[1][j] = xorOperation >> 16;
        input[2][j] = xorOperation >>  8;
        input[3][j] = xorOperation;
    }