AES加密基本原理图解
AES加密
Fright-Moch整理
AES简介
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,
流程图如图

&明文P: 没有经过加密的数据。
&密钥K: 用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据
&AES加密函数:设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C
&密文C: 经加密函数处理后的数据
&AES解密函数:设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。
&对称加密算法:加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。
&非对称加密算法:加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。
&AES的工作模式:ECB、CBC、CTR、CFB、OFB
ECB模式(默认):电码本模式 Electronic Codebook Book
CBC模式:密码分组链接模式 Cipher Block Chaining
CTR模式:计算器模式 Counter
CFB模式:密码反馈模式 Cipher FeedBack
OFB模式:输出反馈模式 Output FeedBack
明文到密文加密关系

密钥拓展:
将密钥扩充,得到40个新列,分组得到轮密钥,当W[I]中的i是4的倍数时候我们取经过T函数变换的W[i-1]和W[i-4]进行异或操作得到新的W[i]


T函数变换


 
异或操作

当i不是4的倍数时候,我们只需要将w[i-1]和w[i-4]进行异或就能得到新的w[i]

然后就是重复相同的流程得到我们的10组密钥

重复10次

然后就是核心流程(针对明文)

字节代换(非线性)
定义S盒/逆S盒,S盒由16*16的字节组成矩阵,S盒不可自逆

我们通过S盒将明文分组中的元素逐个进行替换
例如替换19我们需要找到第一列第九个元素

我们需要全部替换

字节代换(线性 左循环位移操作)
第N行就位移N字节

新的矩阵如下

列混合(非线性)
由固定矩阵乘变换后的矩阵对列进行操作,得到乘积结果放到原来的位置上面

最后得到的

行位移和列混合为矩阵得到了拓展性
轮密钥加
我们将密钥拓展得到的轮密钥和我们的明文分组矩阵进行逐列的异或操作

将得到的结果进行替换反复进行一个循环
这是第一次的轮密钥加

AES-128一般循环10次
AES-192一般循环12次
AES-256一般循环14次

Output就是最后的加密密文
小结
AES算法中分组长度只能是128位,面向字节运算而DES是面向位运算
AES加密基本原理图解的更多相关文章
- openssl之aes加密(源码分析 AES_encrypt 与 AES_cbc_encrypt ,加密模式)
		
首先要了解AES加密是什么,以及几种加密模式的区别.之后才是编程.具体的编程案例,在下面的链接. openssl之aes加密(AES_cbc_encrypt 与 AES_encrypt 的编程案例) ...
 - 关于CryptoJS中md5加密以及aes加密的随笔
		
最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...
 - AES加密
		
package com.edu.hpu; import java.math.BigInteger; import java.security.MessageDigest; import java.se ...
 - Android数据加密之Aes加密
		
前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...
 - c#和js互通的AES加密解密
		
一.使用场景 在使用前后端分离的框架中常常会进行传输数据相互加密解密以确保数据的安全性,如web Api返回加密数据客户端或web端进行解密,或者客户端或web端进行加密提交数据服务端解密数据等等. ...
 - AES加密解密通用版Object-C / C# / JAVA
		
1.无向量 128位 /// <summary> /// AES加密(无向量) /// </summary> /// <param name="plainByt ...
 - nodejs与javascript中的aes加密
		
简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.高级加密标准已然成为对称密钥加 ...
 - 非对称技术栈实现AES加密解密
		
非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...
 - Java aes加密C#解密的取巧方法
		
摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Ja ...
 
随机推荐
- html 去除重复边框
			
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
 - HCNA Routing&Switching之地址转换技术NAT
			
前文我们了解了包过滤工具ACL相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15156308.html:今天我们来聊一聊地址转换技术NAT相关话题: ...
 - DVWA-全等级文件上传
			
DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...
 - 基于kail的docker下安装sqli-labs
			
后面的关卡涉及到转码问题,比如空格,在Windows中会受到限制,比如24关的文件重命名问题,所以在这记录下在docker下安装sqli-labs,在linux下运行就不会受到限制. 参考链接:htt ...
 - VMware 启动虚拟机黑屏(Ubuntu)
			
之前启动都很正常,不知道为啥,最近启动,老出现这种黑屏得情况: 解决方法: 在搜索栏里搜索cmd 巴拉了一下谷歌,发现了问题: 虚拟机和主机之间的通信,基本上是以 socket 的方式进行通信的(这里 ...
 - .NET Core:在ASP.NET Core WebApi中使用Cookie
			
一.Cookie的作用 Cookie通常用来存储有关用户信息的一条数据,可以用来标识登录用户,Cookie存储在客户端的浏览器上.在大多数浏览器中,每个Cookie都存储为一个小文件.Cookie表示 ...
 - 查看node.js全局安装的插件路径
			
查看 npm 全局插件 默认全局安装路径 参考:https://www.jianshu.com/p/f2873fcef5aa 首先 nodejs安装好之后,默认情况下会有如下配置 npm confi ...
 - datetime和timestamp的区别
			
时间日期数据类型总概况 MySQL中有多种表示时间日期的数据类型,主要有YEAR.TIME.DATE.DATETIME.TIMESTAMP等.每一种数据类型都有存储的时间日期格式.以及取值范围,因此在 ...
 - qt 中的自定义pushbutton
 - Hibernate之持久化对象
			
时间:2017-1-19 23:00 --Hibernate持久化类的状态1.持久化类:就是一个实体类与数据库建立了映射.2.Hibernate为了方便管理持久化类,将持久化类分为了三种状态: ...