AES算法实例

AES算法实例

AES是常用的对称加密算法,采用相同秘钥对明文进行加解密,他的速度比RSA算法要快很多,一般在数据加解密和文件加解密过程中使用,而RSA则更多用于密钥传输,常见密钥长度为128、192,256位。
AES加密是一种分组算法,若明文超过128位,则讲其分成多个128位的块再进行加密,密钥生成时会讲秘钥扩展成128位(以128位为例)

加密过程

在密钥长度为128位时,要进行10轮循环运算,其中9轮为subBytes->ShiftRows->mixColumns->addRoundKey,最后一轮为subBytes->ShiftRows->addRoundKey,过程见下图
AES算法实例_第1张图片

subBytes(字节代换)

将明文与S盒(S盒图片来自ReadingLover)进行字节代换
AES算法实例_第2张图片
通过一一代换得到代换后的值,
AES算法实例_第3张图片

ShiftRows(行移位)

第一行不变第二行向左移动一位,第三行向左移动两位,第4行移动三位
AES算法实例_第4张图片

mixColumns(列混合)

将上一步得到的结果的每一列列乘MC矩阵(伽罗瓦矩阵)得到新的结果
计算方法为

x乘01:就是x本身
x乘02:把x转化为二进制左移一位,如果会溢出(原先x最高位为1),加(异或)1b

比如ad*02,将ad转化为二进制为10101101,左移一位为01011010,因为溢出,所以要计算01011010 ⊕00011011得到结果为01000001
比如66*02,将66转化为二进制为01100110,左移一位为11001100,得到结果即为11001100

x乘03:x * 03 = (x * 02)+ x,用前两个方法计算
矩阵乘的计算方法为行乘列相加以第一列为例,02×ad+03×e6+01×5d+01×fb=d6,剩下的15个结果按这种方式计算出来

AES算法实例_第5张图片
AES算法实例_第6张图片
AES算法实例_第7张图片
AES算法实例_第8张图片
最终得到
AES算法实例_第9张图片

addRoundKey(密钥轮加)

用轮密钥与上一步结果进行简单的亦或运算
假设轮密钥为
AES算法实例_第10张图片
AES算法实例_第11张图片
AES算法实例_第12张图片
AES算法实例_第13张图片
AES算法实例_第14张图片
最终得到结果
AES算法实例_第15张图片
整个计算过程为:
AES算法实例_第16张图片
以上过程就是一次循环运算,将结果再进行8次这样的循环(共9次),最后一次循环不用mixColumns,这样AES加密的过程就基本完成了

你可能感兴趣的:(学习java)