由于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 |
--------------------- --------------------- ---------------------
三.开始加密
四.开始解密