arrays - 在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
}
解决方案
推荐阅读
- python - Appwrite 在一个带有简单 python 的 docker 容器中会引发安全错误......我认为
- html - 从 Jekyll Liquid 中的读取估计中删除代码块
- c# - 使用 filestream 读取 WAV 文件并输出文本
- python - 如何调整大数组的大小并将其存储为灰度图像?
- node.js - 可以通过ajax运行puppeteer吗?
- delphi - 跨 Windows 和 Android 的 Curl 和 OpenSSL 功能
- c# - 登录并从 AAD 检索不记名令牌
- python - 使用 python-ldap 处理 LDIF 修改记录
- javascript - ion-select Multiple - 如何根据所选选项取消选择所有其他选项
- python - QGraphicsRectItem的setTransformOriginPoint如何进行旋转和偏移