转载自我的笔记: http://caf99af3.wiz03.com/share/s/3a-pHP3y4ABk2SLM5t03faoi0l_0X73Ex4342GXNjU2XHnrH
- S-box s盒替换
- shiftRows行变换
- MixColumns 列混淆
这个部分会接受4个字节的输入,并输出4个字节
AES 所用的加法和乘法是基于数学(译者注:近世代数)的域论。尤其是 AES 基于有限域GF(28)。加法是异或操作
b
∗
0
x
03
=
b
∗
(
0
x
02
+
0
x
01
)
=
(
b
∗
0
x
02
)
+
(
b
∗
0
x
01
)
b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01)
b∗0x03=b∗(0x02+0x01)=(b∗0x02)+(b∗0x01)
b
∗
0
x
0
d
=
b
∗
(
0
x
08
+
0
x
04
+
0
x
01
)
=
(
b
∗
0
x
08
)
+
(
b
∗
0
x
04
)
+
(
b
∗
0
x
01
)
=
(
b
∗
0
x
02
∗
0
x
02
∗
0
x
02
)
+
(
b
∗
0
x
02
∗
0
x
02
)
+
(
b
∗
0
x
01
)
b * 0x0d = b * (0x08 + 0x04 + 0x01) = (b * 0x08) + (b * 0x04) + (b * 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01)
b∗0x0d=b∗(0x08+0x04+0x01)=(b∗0x08)+(b∗0x04)+(b∗0x01)=(b∗0x02∗0x02∗0x02)+(b∗0x02∗0x02)+(b∗0x01)
这步中与输入矩阵相乘的矩阵中的值来自 0x01、0x02、0x03、0x09、0x0b、0x0d 0x0e
, 顺序如何确定提问中… ,已有前辈解答,该矩阵是固定死的。
这下来看左上方的 04
是怎么得来的:
0xd4 * 0x02 ⊕ 0xbf * 0x03 ⊕ 0x5d * 0x01 ⊕ 0x30 * 0x01
= 0xd4 * 0x02 ⊕ xbf * 0x02 ⊕ 0xbf * 0x01 ⊕ 0x5d * 0x01 ⊕ 0x30 * 0x01
=0xd4*0x02 ⊕ xbf*0x02 ⊕ 0xbf ⊕ 0x5d ⊕ 0x30 (注意这里的0xd4*02就是0xd4左移一位,然后异或0x1b (0001 1011)哦,加法就是求异或)
=1010 1000 ⊕ 0001 1011 ⊕ 0111 1110 ⊕ 0001 1011 ⊕ 1011 1111 ⊕ 0101 1101 ⊕ 00110000
=0000 0100
=0x04