首页 > 解决方案 > 在C中添加数组的指针

问题描述

我不明白为什么 EK 的数组大小为 44,但该函数的每一轮仅修改 rkexp[0]、rkexp[1]、rkexp[2] 和 rkexp[3] 的数据。总共有 10 轮,我展示了其中的两轮。

我也不明白 rkexp 是如何每轮加 4 的,该数组是如何加 4 的以及发生了什么变化?

下面是C语言代码

int main(){
    unsigned char k[16] = "1234567890123456";
    unsigned int EK[44];
    AESKeySteup(k, EK);

}

void AESKeySteup(const unsigned char* rk, unsigned int* rkexp)
{
    // round key 0
    memcpy(rkexp, rk, 16); 
    print('K', rkexp, 44);
    
    // round key 1 
    rkexp += 4; 
    print('K', rkexp, 44);
    rkexp[0] = ((unsigned int *)rk)[0] ^ 
        (TE4[((rkexp-4)[3] >> 8) & 0xff] & 0x000000ff) ^
        (TE4[((rkexp-4)[3] >> 16) & 0xff] & 0x0000ff00) ^
        (TE4[(rkexp-4)[3] >> 24] & 0x00ff0000) ^
        (TE4[(rkexp-4)[3] & 0xff] & 0xff000000) ^
        rcon[0];
    print('K', rkexp, 44);
    
    rkexp[1] = rkexp[0] ^ (rkexp-4)[1];
    rkexp[2] = rkexp[1] ^ (rkexp-4)[2];
    rkexp[3] = rkexp[2] ^ (rkexp-4)[3];

    // round key 2
    rkexp += 4; 
    rkexp[0] = (rkexp-4)[0] ^ 
        (TE4[((rkexp-4)[3] >> 8) & 0xff] & 0x000000ff) ^
        (TE4[((rkexp-4)[3] >> 16) & 0xff] & 0x0000ff00) ^
        (TE4[(rkexp-4)[3] >> 24] & 0x00ff0000) ^
        (TE4[(rkexp-4)[3] & 0xff] & 0xff000000) ^
        rcon[1];
    rkexp[1] = rkexp[0] ^ (rkexp-4)[1];
    rkexp[2] = rkexp[1] ^ (rkexp-4)[2];
    rkexp[3] = rkexp[2] ^ (rkexp-4)[3];
     
    ...
    and so on
}

标签: arrayscpointersbyteaes

解决方案


推荐阅读