【发布时间】:2015-10-21 15:54:56
【问题描述】:
我正在尝试在 AES 加密 (Rijndael) 中实现查找表。公式如下(based on their paper):
我的代码是(仅一轮):
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;
}
问题是:
我的代码是否准确地映射了公式?因为当我用某个密钥加密纯文本时,我没有得到预期的密码。
【问题讨论】:
-
欢迎来到 Stack Overflow!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括期望的行为、特定问题或错误以及必要的最短代码在问题本身中重现它。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。
-
如果您的代码运行良好,您为什么要问我们?
-
输入[][] 数组的类型是什么?你是怎么申报的?
-
如果
j和C1都是无符号整数,那么j-C1可能是溢出,(j-C1)%Nb可能是错误的。你觉得可能吗?如果添加多个 Nb 会发生什么?你能试试(j+(C1*Nb-C1))%Nb之类的吗? -
@francis 关于
j类型的好问题。仅当签名j时,这可能会影响结果。在这种情况下,索引值可能为负。对于无符号类型,溢出给出了预期的结果,因为Nb=4。无论如何最好使用保护添加Nb:(j + Nb - C) % Nb
标签: c encryption aes