AES128算法
https://blog.csdn.net/u013605322/article/details/83443612?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-1-83443612.pc_agg_rank_aggregation&utm_term=aes128加密算法&spm=1000.2123.3001.4430
1、AES是一个对称密码,旨在取代DES成为广泛使用的标准。
(DES也是一个加密的算法,原始思想可以参照二战德国的恩尼格玛机,
只有一种方法可以破解该算法,那就是穷举法。)
过程简述:首先是一个16字节的验证码,和一个M个字节的秘钥。
第0步:取16字节的验证码和16字节的秘钥。做第一次初始变换。
输出一个16字节的状态码。
第1步:取上16字节的状态码和第一轮的16字节的秘钥,做4次变换
输出一个16字节的状态码
. .
. .
. .
. .
. .
. .
第n-1步:取上16字节的状态码和第n-1轮的16字节的秘钥,做4次变换
输出一个16字节的状态码
第n步:取上16字节的状态码和第n轮的16字节的秘钥,做4次变换
输出一个16字节的密文。
16字节密钥对应10轮,24字节密钥对应12轮,32字节对应14轮。
2、小插曲:Feistel 密码结构(分组密码中的一种对称结构,对信息的
加密和解密的过程就极为相似,甚至完全一样。这就使得在实
施的过程中,对编码量和线路传输的要求就减少了几乎一半。)
3、其前N-1轮由4个不同的变换组成:字节代替、行移位、列混淆和轮密钥加。
最后一轮仅包含三个变换(逆向行移位、逆向字节代替、轮秘钥加)。而在第一轮前面有一个起始的单变换(轮密钥加),
可以视为0轮。
字节代替(SubBytes):用一个S盒完成分组的字节到字节的代替。
行移位(ShiftRows):一个简单的置换。
列混淆(MixColumns):利用域GF(28)上的算术特性的一个代替。
轮密钥加(AddRoundKey):当前分组和扩展密钥的一部分进行按位异或XOR。
4、数据结构
加密解密算法的输入是一个128位分组。
这些分组被描述成4×4的字节方阵,这个分组被复制到state数组中,
并在加密和解密的每一阶段都被修改。在字节方阵中,每一格都是一个字,
包含了4字节。在矩阵中字是按列排序的。