AES加密算法应该是DES加密算法的强化提升版,同样也是对称加密算法中分组加密的一种,只不过明文块的大小变为128bit,密钥的长度可以多种,128bit对应10轮循环,192bit对应12轮,256bit对应14轮循环,在此篇中使用128bit的密钥长度作为示范。

大致的过程如下所示,初始变换指的是与密钥进行异或操作,最终变换就是不进行列混合操作。

AES加密算法的过程

将128bit的明文分成16*8bit,一共十六个byte进行操作

S盒字节代换,首先规定的是排列方式,16byte按照纵向排列成4*4的大小的矩阵块,如下所示。

16字节排列方式

把8bit长度的内容分成前后两个4bit的16进制数,分别对应行号和列号,找到对应的1byte的数字作为替代。

行号列号对应表

以下图为例,就是字节代换的情况

字节代换的过程

第二步行移位的过程就比较简单了,4*4的矩阵,按照字节位置依次左移若干位即可。

行位移的过程

第三步是列混合操作,类似于进行左乘一个固定矩阵来实现这个操作,当然这里与正常的矩阵乘法运算不一样,不满足四则运算的关系,是遵循有限域上的加法和乘法准则,加法就是异或操作,具体的内容涉及到抽象代数,不过多展开了。

列混合操作

最后一步是轮密钥相加,就是与轮密钥矩阵进行异或操作,每一轮操作中所使用到的密钥是不一样的,所以才被称为轮密钥。接下来来介绍由密钥生成轮密钥的方法,这里的操作对象是每一列的4个byte组成的向量,一般是异或操作来构成新的向量。每次轮密钥选择相邻的四个向量组成的密钥矩阵进行异或操作。

轮密钥的生成

关键是T函数,由三个部分组成,首先是循环左移1字节的字循环操作,即1到4,2到1,3到2,4到3.  随后就再按照行号和列号使用S盒进行字节代换,更换得到的结果再与轮常量进行异或操作,这个轮常量是每一轮循环都会使用不相同的值。

 

最后就可以得到密文了,最终轮是不进行列混合操作的。

Logo

集算法之大成!助力oier实现梦想!

更多推荐