由于AES的数学原理在网上有很多,所以在这里就不再说明,主要是加密流程。
先说明一下AES的几个必备参数的初始化
typedef struct _AES{
}AES;
这里统一为4列n行,可以用unsigned long数组表示。
Nb = 明文或密文长度/4 ;Nk = 密钥长度/4;加密轮数Nr = Nb < Nk ? Nk:Nb+6;
一.密钥库的生成过程
二.State生成
AES算法中行混淆的实现:
--------------------- --------------------- ---------------------
| s0 | s1 | s2 | s3 | | s0 |
|
|
| | t0 | t5 | ta | tf |
--------------------- --------------------- ---------------------
| s4 | s5 | s6 | s7 | | s4 | s5 |
|
| | t4 | t9 | te | t3 |
--------------------- --------------------- ---------------------
| s8 | s9 | sa | sb | | s8 | s9 | sa |
| | t8 | td | t2 | t7 |
--------------------- --------------------- ---------------------
| sc | sd | se | sf | | sc | sd | se | sf | | tc | t1 | t6 | tb |
---------------------
--------------------- ---------------------
|
|
|
|
|
|
| s1 | s2 | s3 | |
|
|
|
|
---------------------
--------------------- ---------------------
则temp = {s0,s5,sa,sf};temp值经其它运算后放入State的第n行。
下面是解密时的情况
拷贝前:
拷贝后:
处理完后的结果:
c0
c1
c2
c3
c0
c1
c2
c3
c0
c1
c2
c3
|
|
|
|
|
|
|
| s6 | s7 | |
|
|
|
|
---------------------
--------------------- ---------------------
|
|
|
|
|
|
|
|
| sb | |
|
|
|
|
---------------------
--------------------- ---------------------
--------------------- --------------------- ---------------------
|
|
|
|
| |
|
|
|
s7
| |
|
|
|
|
--------------------- --------------------- ---------------------
|
|
|
|
| |
|
|
sa
|
sb
| |
|
|
|
|
--------------------- --------------------- ---------------------
|
|
|
|
| |
| sd | se | sf
| |
|
|
|
|
--------------------- --------------------- ---------------------
| s0 | s1 | s2 | s3 | | s0 | s1 | s2 | s3 | | t0 | td | ta | t7 |
---------------------
--------------------- ---------------------
|
s4
| s5
|
s6
|
s7
|
|
s4
| s5 | s6 |
| |
t4 |
t1
|
te
|
tb
|
---------------------
--------------------- ---------------------
|
s8
|
s9
|
sa
| sb
|
|
s8
|
s9
|
|
| |
t8
|
t5
|
t2
|
tf
|
---------------------
--------------------- ---------------------
|
sc
| sd
|
se
| sf
|
|
sc
|
|
|
| |
tc
|
t9
|
t6
|
t3
|
---------------------
--------------------- ---------------------
三.开始加密
四.开始解密