【问题标题】:AES Lookup Tables implementationAES 查找表实现
【发布时间】: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
  • 如果您的代码运行良好,您为什么要问我们?
  • 输入[][] 数组的类型是什么?你是怎么申报的?
  • 如果jC1 都是无符号整数,那么j-C1 可能是溢出,(j-C1)%Nb 可能是错误的。你觉得可能吗?如果添加多个 Nb 会发生什么?你能试试(j+(C1*Nb-C1))%Nb之类的吗?
  • @francis 关于j 类型的好问题。仅当签名 j 时,这可能会影响结果。在这种情况下,索引值可能为负。对于无符号类型,溢出给出了预期的结果,因为Nb=4。无论如何最好使用保护添加Nb(j + Nb - C) % Nb

标签: c encryption aes


【解决方案1】:

我已经弄清楚我的代码出了什么问题... :)

我将输入用作影响结果的输出。我所做的只是使用另一个数组作为输出,然后在一轮完成后将结果复制回输入。

谢谢你们和我一起尝试......

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多