| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> AES(对称加密)学习记录 -> 正文阅读 |
|
[网络协议]AES(对称加密)学习记录 |
简单了解之前学到的RSA加密是非对称加密,而AES则是对称加密,区分点在于AES加密解密过程中用的密钥是相同的。这里记明文为P,密文为C,密钥为K。支持的密钥K的长度有128位,192位,256位。 加密:C = E(P,K),E为加密函数 解密:P = D(C,K),D为解密函数 大致加密过程AES加密过程使用的是分组加密,即把明文P分成n组,对n组明文分别使用密钥K加密得到n组密文,将n组密文组合就得到了最终的密文C。且对每一组明文有长度要求,即128bit位(16个字节,每个字节8位)。可以知道,加密得到的每一组密文的长度也是128bit位。 明文填充加密过程中,很可能出现明文长度不为128整数倍的情况,这就不能保证每一组的明文长度一致,这时就需要进行填充了。填充的方法有这么几种:NoPadding、PKCS#5、PKCS#7、ISO 10126、ANSI X9.23、ZerosPadding?。可以知道,如果在加密的时候,如果使用了某种填充方法,对应解密也需要用对应的填充方法。 填充方法解释 NoPadding:不填充,只能加密长为128bits倍数的信息,很少使用。 PKCS#5、PKCS#7:缺几个字节,就补充几个字节,且补充的值为缺失字节的数量。举例:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6} ISO 10126:最后一个字节是填充的字节数(包括最后一字节),其他全部填随机数 ANSI X9.23:?类似于ISO 10126,只不过ANSI X9.23其他字节填的都是0而不是随机数 ZerosPadding:全部填充 详细加密过程四个步骤:字节替换、行移位、列合和轮密钥加。 注:根据密钥长度不同,加密的轮数也不同,128位的密钥推荐加密轮数为10,192位的密钥推荐加密轮数为12,256位的密钥推荐加密轮数为14。在第一轮之前要进行轮密钥加,即将明文矩阵与密钥矩阵进行异或操作。最后一轮没有进行列混合操作。? 1、字节替换 通过一个替换表(S盒)对每个字节进行替换,且过程是可逆的,将每一个字节的前4位作为行值,后4位作为列值,到t查找,进行输出。 解密过程就是用逆盒进行相同的操作。 2、行移位 将16位的明文P分成16组,放入4*4的矩阵中: 顺序位从上到下,从左到右 加密行移位操作:第0行:保持不动; 移位后的明文矩阵:
解密操作对应进行右移即可。 3、列混合 加密过程:将得到的状态矩阵左乘另一个给定的4*4的矩阵,即给定矩阵*经过行移位的矩阵。 解密过程:只需再次与相乘的矩阵进行异或即可 需要注意的是,这里的矩阵相乘与普通的矩阵相乘不大一样,举例操作:假设给定矩阵第一行为 {02 03 01 01},经过行移位的矩阵的第一列为{d4 bf 5d 30},相乘得到:02*d4⊕03*bf⊕5d⊕30,
4、轮密钥加? 将经过列混合的矩阵与轮密钥矩阵,每一列对应进行异或操作。而轮密钥矩阵是通过最开始的密钥矩阵经过密钥扩展得到的。之前说到128位的密钥推荐加密轮数为10,而每一轮都会得到一个轮密钥。 综上,总体过程为:
那10轮循环过程中的轮密钥怎么得来的呢---密钥扩展 密钥扩展?将子密钥K分组,放入矩阵中去: 记每一列为Wi,补上扩展部分:
1、如果i不是4的倍数,则Wi的计算公式为: Wi = W[i-4] ⊕ W[i-1] 2、如果i是4的倍数,则Wi的计算公式为: Wi =?W[i-4] ⊕ T(W[i-1]),这里用到了T函数,T函数由三部分组成:字循环、字节代换、轮常量异或。 字循环:将一个字中的4个字节循环左移一个字节,如{a0,a1,a2,a3}变为{a1,a2,a3,a0} 字节代换:对经过字循环的结果使用S盒进行字节代换 轮常量异或:轮常量是给定的,将上一步得到的结果,与轮常量R[j]异或,j表示轮数 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:52:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |