实训第二天--加密工具

今天布置了摸底作业,不会再快乐了。

要求功能:

在明文编辑框中输入明文,实时转换为密文(base64编码格式)并在下方编辑框中显示。

一、什么是AES算法?

AES是密码学中的高级加密标准(Advanced Encryption Standard),AES算法是典型的对称加密算法。对称加密不同于信息摘要,是真正意义上的加密算法,摘要算法是不可逆的,它的主要作用是对信息的一致性和完整性的校验。而对称加密算法是可逆的,主要作用是保证私密信息不被泄漏。

学习AES算法之前,首先要清楚三个基本概念:密钥、填充、模式。

1. 密钥

密钥是AES算法实现加密解密的根本,对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。

AES支持三种长度的密钥:128位,192位,256位

从安全性来看,AES256安全性最高。从性能来看,AES128性能最高。本质是原因是它们的加密处理轮数不同。

2. 填充

了解填充的概念之前,要理解AES的分组加密特性。

梳理一下:

1. 把明文按照128bit拆分成若干明文块。

2. 按照选择的填充方式来填充最后一个明文块。

3. 每一个明文块利用AES加密器和密钥,加密成密文块。

4. 拼接所有的密文块,成为最终的密文结果。

那么AES加密器里有什么呢?请看下图:

AES算法在对明文加密时,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每个明文块长度128bit。

这些明文经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的加密结果。

如果一段明文长度为192bit,如果按照每128bit一个明文来拆分的话,第二个明文块只有64bit,不足128bit,那就需要对明文块进行填充。

3. 模式

AES的工作模式体现在把明文块加密成密文块的处理过程中,有五种不同的工作模式:ECB、CBC、CTR、CFB、OFB。模式之间的主题思想近似,在处理细节上略有差别。

ECB模式(默认):电码本模式 Electronic Codebook Book

CBC模式:密码分组链接模式 Cipher Block Chaining

CTR模式:计算器模式 Counter

CFB模式:密码反馈模式 Cipher FeedBack

OFB模式:输出反馈模式 Output FeedBack

如果在AES加密的时候使用了某一种工作模式,解密的时候也必须采用同样的工作模式。

二、AES算法的底层原理

ASES加密不是一次把明文变成密文,而是先后经过多轮加密。具体分为:

初始轮一次,普通轮N次,最终轮1次

Key的长度决定AES加密的轮数:

AES128: 10轮

AES192: 12轮

AES256: 14轮

不同阶段的Round有不同的处理步骤:

初始轮只有一个步骤:加轮密钥

普通轮有四个步骤:1. 字节代替 2. 行位移 3. 列混淆 4. 加轮密钥

最终轮有三个步骤:1. 字节嗲题 2. 行位移 3. 加轮密钥

具体解释如下:

1. 字节替代

16字节的明文块在每一个处理步骤中都被排列成4*4的二维数组,所谓字节替代,就是把明文块的每一个字节都替代成另外一个字节。替代的依据是一个被称为S盒的16*16大小的二维常量数组。

2. 行位移

本步骤比较简单,像图中描述,第一行不变,第二行循环左移1个字节,第三行循环左移2个字节,第三行循环左移3个字节。

3. 列混淆

这一步,输入数组的每一列要和一个名为修补矩阵的二维常量数组做矩阵相乘,得到相应的输出列。

4. 加轮密钥

这一步是唯一利用到密钥的一步,128bit的密钥也同样被排列成4*4的矩阵。让输入数组的每一个字节a[i,j]与密钥对应位置的字节k[i,j]异或一次,就生成了输出值b[i,j]。

需要补充一点,加密的每一轮所用到的密钥并不是相同的,涉及到一个概念:扩展密钥。

扩展密钥:

AES源代码中用长度4*4*(10+1)字节的数组W来存储所有轮的密钥。W{0-15}的值等同于原始密钥的值,用于为初始轮做处理。

后续每一个元素W[i]都是由W[16-31]用于第一轮的处理,W{32-47}用于第2轮的处理...一直到W{160-175}用于最终轮(第10轮)的处理。

三、解密流程

解密流程基本是把加密流程倒置过来,顺序变为最终轮->普通轮->初始轮。扩展密钥的使用顺序也和加密相反。

前边提到的五种工作模式的差别体现在宏观上,即明文块与明文块之间的关联。AES加密器的内部处理流程都是相同的。以ECB和CBC两种模式作为栗子来说明的。

1. ECB模式

ECB模式是最简单的工作模式,在该模式下,每一个明文块的加密都是完全独立的,互不干涉的。

这样的好处有什么呢:

1. 简单

2. 有利于并行计算

有什么缺点呢?

相同的明文块经过加密会变成相同的密文块,因此安全性较差。

2. CBC模式

CBC模式引入了一个新概念:初始向量IV。

IV是做什么用的呢?它的作用与MD5“加盐”有些类似,目的是防止同样的明文块始终加密成同样的密文块。

从图中看出,CBC模式在每一个明文块加密前会让明文块和一个值先做成异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。这样一来,相同的明文块加密出的密文块显然不一样。

CBC模式有哪些好处?安全性更高

坏处也很明显:

1. 无法使用并行计算,性能不如ECB

2. 引入初始化向量IV,增加复杂度

原文地址:https://www.cnblogs.com/lbwBH/p/15154361.html