aes解密小脚本

计算逆s盒

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdint.h>

// AES S盒
const uint8_t S_BOX[16][16] = {};

int main(){
uint8_t InvS[16][16] = {{0}}; // 逆S盒初始化

// 生成逆S盒
for (uint8_t i = 0; i < 16; i++)
{
for (uint8_t j = 0; j < 16; j++)
{
uint8_t value = S_BOX[i][j];
uint8_t row = value >> 4; // 高4位作为行索引
uint8_t col = value & 0x0F; // 低4位作为列索引
InvS[row][col] = (i << 4) | j; // 组合原始位置
}
}

// 打印生成的逆S盒(可选)
printf("AES Inverse S-Box:\n");
// printf(" 0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
for (int i = 0; i < 16; i++)
{
// printf("%X: ", i);
for (int j = 0; j < 16; j++)
{
printf("0x%02X, ", InvS[i][j]);
}
printf("\n");
}
return 0;
}

注意列混合(MixColumns),这里多数会多加一次异或进行魔改