快捷搜索:

AES加解密流程及实现

AES加解密流程及实现

  asp源码怎么建站asp动态页面对于现代密码学来说,如果从秘钥的数量划分可以分为对称密码学和非对称密码学,对称加密只使用一把秘钥加解密,非对称加密则通过公钥和私钥两个秘钥加解密。

  AES是一种分组密码 分组长度为128位(16字节),根据密钥长度可分为AES-128 AES-192和AES-256,密钥长度不同,AES的加密轮数也不同。

  ECB是最简单和最早的模式,首先是密钥扩展,将加密的数据按照16字节的大小分成若干组,对每组都用同样的密钥加密。

  CBC和ECB的区别就是添加了一个初始向量(16字节),在将密钥分成若干组之后,第一组与初始化向量异或之后再进行与ECB相同的加密流程,后面的每一组都与上一组的密文进行异或之后再与密钥加密。

  密钥扩展的目的是将一个128位的密钥扩展10次变成11个128位的秘钥来用于接下来的轮密钥加操作。

  当i是4的倍数时 要计算Wi,需要先将Wi-1进行左移1个字节(向上移动表示左移)的操作、然后用给定的sBox替换(字节代换),进行sBox替换的时候需要将被替换的字节按照高4位做x坐标,低4位做y坐标在sBox中找到替换到的字节表示。最后再将得到的字节序列与Wi-4和轮常数(轮常数是通过右边的方法计算得到的)进行异或得到Wi的字节序列。当i不是4的倍数时,Wi就是Wi-1和Wi-4的异或结果。重复计算40次得到其余10轮的轮密钥,构成11轮的轮密钥。

  字节代换就是将被替换的字节按照高4位做x坐标,低4位做y坐标在sBox中找到替换到的字节表示。sBox是通过一种特定的(求有限域内各元素的乘法逆元和仿射变换的)方式得到的16*16的矩阵asp技术,就比如是4f这个字节在sBox中就是第4行第15列的字节0x84代替0X4f。

  解密时的行移就是相反的,第一行还是不变,第二行左移3个字节,第三行左移2个字节,第四行左移1个字节。

  列混合是AES算法中最复杂的部分,它混合了输入的每一列,使得输入的每个字节都会影响到输出的四个字节。分别将当前组中的每一列乘一个固定矩阵,这里的矩阵乘法和一般的矩阵乘法不同,就像下面这张图一样,乘的结果在相加时用的是异或运算,最后用结果取代原字节序列。

  这里直接贴一下维基百科上的列混合实现,这个实现做了一些简化,通过使用移位和异或替换乘2,使用与异或相结合的乘2代替乘3。

  轮密钥加就是将列混合得到的结果中的每一列分别与密钥中的每一列做异或,然后取代原字节序列,实现也很简单,就是一个异或操作。

  加解密就是把之前的几个操作整合起来,这里还是拿最简单的AES-128位、ECB模式举例,128位对应的加密轮数是10轮,其中轮密钥加累计11次,通过之前的介绍我们知道只有轮密钥中会用到密钥,初始密钥的长度为128位16字节经过10次扩展之后正好满足11次轮密钥加的需要。

  扩展完密钥之后就是如下图所示正式的加密流程,先是1轮的轮密钥加,接下来是9轮的字节代换、行移位、列混合、轮密钥加组成的运算组。最后1轮只有字节代换、行移位和轮密钥加,没有了列混合,原因是为了使加解密的结构更相似而且最后一轮的列混合经过证明不会提高或者降低密码的安全性,因为列混合是AES最复杂的一层操作,去掉之后还可以提升计算速度等。

您可能还会对下面的文章感兴趣: