算法优化主要就是在矩阵相乘中,优化的方式也很简单,就是空间换时间。
AES算法的矩阵是有特点的,矩阵如下:
02 03 01 01
01 02 03 01
01 01 02 03
03 01 01 02
每一竖行都是02 01 01 03 组成。
分析矩阵相乘
02 03 01 01 a1 02*a1 + 03*a2 + 01*a3 + 01*a4 b1
01 02 03 01 * a2 = 01*a1 + 02*a2 + 03*a3 + 01*a4 = b2
01 01 02 03 a3 01*a1 + 01*a2 + 02*a3 + 03*a4 b3
03 01 01 02 a4 03*a1 + 01*a2 + 01*a3 + 02*a4 b4
所以乘法的实现就不用像以前一样每次都去算,可以直接存起来,节约算得时间。
还有一个小技巧是存得时候可以存成4长度向量,比如a1=0x23,向量为 a3 23 23 e3=(02 01 01 03)
存得时候就是256个这种向量
算矩阵乘法就很简单了先找到a1 a2 a3 a4 的向量
a2右移一个位,其实就是(02 01 01 03)=》(03 02 01 01)
a3右移两个位,其实就是(02 01 01 03)=》(01 03 02 01)
a4右移三个位,其实就是(02 01 01 03)=》(01 01 03 02)
由于+算法就是^
把刚才得到的4个向量做一下^,就直接得到向量b=(b1 b2 b3 b4)
到此我们要得结果一下就出来了。