java aes加密解密-aes加密 java
一.AES简介
AES属于分组加密算法,,每组长度相等,每次加密一组数据,直到加密完整个明文,明文长度固定为128位,密钥长度可以是128(10轮循环)、192(12轮循环)、256位(14轮循环)。
明文P需要分组,称为状态,状态用以字节为元素的矩阵阵列表示,16字节明文按照此顺序放入矩阵,规则为:从上到下,从左到右,依次进行。密钥K也需要分组,原理与明文P相同。
(1)明文P:没有经过加密的数据。
(2)密钥K:用来加密明文的密码,在对称加密算法中java aes加密解密,加密与解密的密钥是相同的。
(3)AES加密函数:设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。把明文P和密钥K作为加密函数的参数输入java aes加密解密,加密函数E会输出密文C。
(4)密文C:经加密函数处理后的数据
(5)AES解密函数:设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。
二.加密过程
前9轮循环4个步骤,最终轮进行1、2、4步
初始变换--明文和子密钥进行异或
字节代换--查表进行数的代换
行移位
三.解密过程
AES加密过程涉及到4种操作,分别是字节代换、行移位、列混淆和轮密钥加。解密过程分别为对应的逆操作。每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。
3.1字节代换
AES的字节代换需要查表,通过S盒实现一个字节到另一个字节的映射,逆字节代换通过查逆S盒。
3.2行移位
行移位的逆变换是将状态矩阵中的每一行执行相反的移位操作,例如:AES-128中,状态矩阵的第0行右移0字节,第1行右移1字节,第2行右移2字节,第3行右移3字节。
3.3列混淆
逆变换矩阵同正变换矩阵的乘积恰好为单位矩阵。
3.4轮密钥加
密钥加是将轮密钥简单地与状态进行逐比特异或。这个操作相对简单,其依据的原理是“任何数和自身的异或结果为0”。加密过程中,每轮的输入与轮子密钥异或一次;因此,解密时再异或上该轮的轮子密钥即可恢复。轮密钥加过程可以看成是字逐位异或的结果,也可以看成字节级别或者位级别的操作。也就是说,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算。
AES加密算法实现