AES 是一种可用来保护电子数据的新型加密算法。可以使用 128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。
DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。
其密钥长度为 56 位,明文按 64 位进行分组,将分组后的明文组和 56 位的密钥按位替代或交换的方法形成密文组的加密方法。
1 AES 加密算法主要步骤
1.1 AES 算法整体描述
l 给定一个明文 x,将 State 初始化为 x,并进行 AddRoundKey 操作,将 RoundKey 与 State
异或。
l 对前 Nr-1 轮中的每一轮,用 S 盒对进行一次代换操作,称为 SubBytes;对 State 做一置换
ShiftRows;再对 State 做一次操作 MixColumns;然后进行 AddRoundKey 操作。
l 依次进行 SubBytes、ShiftRows 和 AddRoundKey 操作。
l 将 State 定义为密文 y。
1.2 伪代码
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
AddRoundKey(state, w[0, Nb-1])
for round = 1 step 1 to Nr-1
SubBytes(state)
ShiftRows(state)
MixColumns(state)
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
end for
SubBytes(state)
ShiftRows(state)
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out = state
end
2 KeyExpansion()实现
2.1 要求
将 128 bit 的密钥扩展至加密过程中的 9 轮循环,再上初始及最后 2 轮,需构造 11 轮密钥。
每一轮密钥由 4 个字组成。每个字由 4 个 byte 组成。
2.2 算法设计
输入:byte[] key, byte[] w //key 为密钥 w 为扩展的密钥
输出:byte[] w //扩展密钥 长度为 4 * 4 * 11
处理:
1)建立一个 4 byte 的一维数组,存放一个字。Byte[] temp;
2)将密钥 key[0..15]送至 w[0..15];//已赋值 4 个字给 w。
3) for I = 4 to 43
//以下每次处理一个字(32 bit)
temp = w[I-1];
if (I = 0 mod 4) //处理一个字 then
for j = 1 to 4 //字的 4 byte 处理