中国移动 Java基本数据类型 IntelliJ IDEA教程 Zookeeper vim复制 5G sharepoint ionic3 jScrollPane 百度seo关键词 vue框架 vue自定义事件 网站后台管理模板 admin框架 less使用 jq第一个子元素 list获取最后一个元素 bootstrap图表 mac安装hadoop java 数据分析 solr索引 nfc卡片 kubernetes架构 pythonfor循环 python平台 java正则 java数组添加 java将数据写入文件 java获取时间 javahttp linux命令行大全 七宗罪游戏下载 魔兽改图工具 摩尔斯电码翻译器在线 ps蒙版抠图详细教程 mac版matlab 万能播放器电脑版 小度音箱app python求和 极限防守图
当前位置: 首页 > 学习教程  > 编程语言

AES加密算法详解

2020/9/19 15:14:54 文章标签:

由于DES加密算法被破解了,3DES加密算法虽然没有被破解,但是3DES算法的加解密效率低,所有现在都使用AES算法。
AES加密算法是密码学中的高级加密标准,AES为分组加密法,把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文,在AES标准规范中,分组长度只能是128位,AES是按照字节进行加密的,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。这导致密钥长度不同,推荐加密的轮数也不同。

AES算法思想:
1)设计简单;
2)在多个平台上速度快,编码紧凑;
3)抵抗所有已知攻击;
4)没有采用Feistel结构,轮函数由3个不同的可逆均匀变换构成:非线性层、线性混合层和密钥加层。

明文P需要分组,称为状态,状态用以字节为元素的矩阵阵列表示,如图所示:
在这里插入图片描述
16字节明文按照此顺序放入矩阵,规则为:从上到下,从左到右,依次进行。

同样的,密钥K也需要分组,原理与明文P相同,下图为128位密钥矩阵:
在这里插入图片描述

下图为AES加密流程:
在这里插入图片描述
加密过程:C=E(K,P),其中C为加密后的密文,K为密钥,P为明文,E为加密函数。
解密过程:P=D(K,P),其中D为解密函数,解密过程为加密过程的逆运算。
AES的具体加密流程如下图所示:
在这里插入图片描述AES加密过程通过四个步骤实现:字节替换、行移位、列混淆和轮密钥加。
注意: 根据密钥长度不同,加密的轮数也不同,在第一轮之前要进行轮密钥加,最后一轮没有进行列混淆操作。

我们来解释一下这四个步骤的具体含义:
字节替换: 属于非线性替换,具体原理就是通过一个替换表(S盒)对每个字节进行替换,实际上就是一个查表操作,并且此过程可逆,将每一个字节的前4位作为行值,后4位作为列值,去S盒查找,进行输出。
下图为S盒(x表示行,y表示列),例如字节为0x14,那么前四位的16进制为1,后四位的16进制为4,去查找s盒中的第1行第4列的值,可以看出为0xfa,就把原先的字节0x14替换为0xfa。
在这里插入图片描述
解密过程与此相同,唯一就是采用的是逆S盒。

接下来是行位移操作
对于4*4的矩阵,操作为:
第0行:保持不动;
第1行:循环左移1个字节;
第2行:循环左移2个字节;
第3行:循环左移3个字节。
解密过程变为循环右移,每行移动字节数与加密过程相同,下图为列位移示意图。

在这里插入图片描述接下来是列混淆操作
实际上为44的矩阵与另一个44矩阵异或相乘(注意为右乘操作),重新得到一个4*4的矩阵,如下图所示。
解密过程为重新与此矩阵异或,因为两次异或得到的值为原数据本身。
在这里插入图片描述
最后为轮密钥加操作
轮密钥与状态矩阵进行逐比特异或操作。
这个轮密钥是由种子密钥通过密钥编排算法得到的,并且轮密钥长度与分组长度相同。
解密过程与之相同,两次异或得到原始数据。

密钥编排算法基本原则
1)轮密钥的比特数等于分组长度乘以轮数加1;
例如:将128位比特明文进行加密,总共需要(10+1)*128=1408比特密钥。
2)种子密钥扩展为扩展密钥;
3)轮密钥从扩展密钥中取,第一轮取扩展密钥的第0~3列,依次类推。
过程为:
定义:w[0]~w[3]为初始密钥

如果i=4的倍数,即i为每组的第一列,则执行以下3个步骤
1)将w[i]循环左移一个字节:

w[0]w[1]w[2]w[3]w[4]
2b28ab09cf
7eaef74f4f
15d2154f3c
16a6883c09

w[i]=w[i-1]左移一个字节得到。
w[4]=w[3]左移一个字节得到={09,cf,4f,3c}左移一个字节={cf,4f,3c,09}
2)分别对w[i]的每个字节进行S盒替换,本质上就是查表,再替换为另一个字节。
即查表后为w’[i]。
例如,w[4]查表后的w’[4]={8a,84,eb,01},需s盒的自行查看。
3)将前两步的结果同轮常量Rcon[j]进行异或,j表示轮数,Rcon[j]如下图所示

j12345
Rcon[j]01 00 00 0002 00 00 0004 00 00 0008 00 00 0010 00 00 00
j678910
Rcon[j]20 00 00 0040 00 00 0080 00 00 001B 00 00 0036 00 00 00

那么w[i]=w[i-4]⊕w’[i]⊕Rcon[j],此时j=1,因为为第一轮。
即w[4]=w[0]⊕w’[4]⊕Rcon[1],
那么w[8]=w[4]⊕w’[8]⊕Rcon[2],……

如果i≠4的倍数,即i为每组的第二、三、四列,则执行以下一个步骤
即w[i]=w[i-4]⊕w[i-1]
例如w[5]=w[1]⊕w[4],w[6]=w[2]⊕[5],……

最终的到一个扩展密钥:{w[4],w[5],w[6],w[7]},之后的每一轮密钥都是在前一轮基础上形成的。

可能说的不是很明白,后续将会补充。


本文链接: http://www.dtmao.cc/news_show_200234.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?