欢迎您,来到孕妇堂!

孕妇堂首页|手机版

当前位置:首页 > 生活知识 > 生活

aes是什么意思

时间:2023-08-31 11:18:05 浏览:52

假设发送者正在向接收者发送消息。如果没有加密算法,接收者会发送一条明文:“我是灰色的。”

如果消息被中间人截获,即使中间人无法篡改消息,也可以窥探消息内容,从而泄露双方隐私。

因此,我们不再直接传输明文,而是使用对称加密来传输密文,画风变成如下:

具体工作步骤如下:

1.发送方使用密钥123456对明文“我是格雷”进行加密,加密结果为tnyrvx snjzwek zxfecdw==。

2.发送方将加密的内容tnyrvx snjzwek zxfecdw==发送给接收方。

3.接收方接收密文tnyrvx snjzwek zxfecdw==,用密钥123456还原成明文“我是灰色的”。

1.密钥

密钥是aes算法进行加密和解密的基础。对称加密算法是对称的,因为它需要同一个密钥加密和解密明文。

aes支持三种长度的密钥:

128位,192位,256位

我们通常所说的aes128、aes192、aes256,实际上是指aes算法使用不同长度的密钥。

2.填充

要理解填充的概念,首先要了解aes的分组加密特性。

什么是块加密?我们来看看下图:

aes算法在加密明文时,并不是将整个明文加密成一个完整的秘密文本,而是将明文拆分成独立的明文块,每个明文块的长度为128位。

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

但是这里涉及到一个问题:

如果一个明文的长度是192位,如果一个明文块每128位拆分一次,那么第二个明文块只有64位,不是吗

128位。这个时候该怎么办?明文块必须是填充.

no add:不需要填充,但是纯文本必须是16字节的整数倍。

pkcs5padding(默认):如果明文块小于16字节(128位),则在明文块末尾补上对应的字符数,每个字节的值等于丢失的字符数。例如,在纯文本:{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,6,6,6,6,6,6,6}完成。例如,明文:{1,2,3,4,5,a,b,c,d,e}缺少6个字节,可以作为{1,2,3,4,5,a,b,c,e }完成

3.模式

aes的工作模式体现在将明文块加密成密文块的过程中。aes加密算法提供五种不同的工作模式:

欧洲央行、中央银行、携程、cfb、ofb

模式之间的主题相似,但在处理细节上有所不同。本期我们只介绍每种模式的基本定义。

ecb模式(默认):

码本模式电子码本书

cbc模式:

密码块链接模式下的密码块链接

ctr模式:

计算器模式计数器

cfb模式:

密码反馈模式

ofb模式:

输出反馈模式输出反馈

1.kgen.init传入的第一个参数128确定密钥的长度是128bit.

2.密码。getinstance ("aes/cbc/noparding ")确定aes选择的灌装模式为nopadding,工作模式为cbc模式。

几项补充:

1.当我们调用封装的aes算法时,我们使用的密钥不是用于aes加密和解密的真实密钥,而是用于生成真实密钥的“种子”。

2.在填充明文时,如果明文长度原本是16字节的整数倍,除了nopadding以外,其他填充方法都会额外填充一组16字节的明文块。

以上是aes的基本概念。但是我们是有追求的程序员,所以不知道为什么。先说aes算法的底层原理。

这里我们重新梳理一下:

1.根据128位将明文分成几个明文块。

2.根据选定的填充方法填充最后一个明文块。

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

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

https://p1-tt . byteimg.com/origin/pgc-image/1526996178868 ca 2 dda 50 f . png " data-origin=" https://p1-tt . byteimg.com/origin/pgc-image/1526996178868 ca 2 dda 50 f . png "

分为几轮?

1个首轮;和

普通回合)n次

最后一轮是1次

在上一期中,我们提到aes密钥支持三种长度:aes128、aes192和aes256。密钥的长度决定了aes加密的轮数。

不包括初始轮,对应于不同键长度的轮数如下:

ae 128:10轮

aes 192: 12轮

ae 256:14轮

不同阶段的圆有不同的加工步骤。

第一轮只有一步:

附加圆形键(添加圆形键)

普通车轮有四个步骤:

字节而不是(子字节)

行移位(移位行)

列混淆(混合列)

附加圆形键(添加圆形键)

最后一轮有三个步骤:

字节而不是(子字节)

行移位(移位行)

附加圆形键(添加圆形键)

1.字节替代(subbytes)

首先,在每个处理步骤中,16字节的明文块被排列成44的二维数组。

所谓的字节替换是指用另一个字节替换明文块的每个字节。换人的依据是什么?根据一个叫做s盒.的16x16二维常数阵列

假设明文块中a[2,2]=5b(一个字节为两位十六进制),输出值b[2,2]=s[5][11]。

2.行移位(shiftrows)

这一步非常简单。

第一行不变

第二行循环向左移动1字节

第三行循环向左移动2字节

第四行循环向左移动3字节

3.列混淆(mixcolumns)

在这一步中,输入数组的每一列都被矩阵乘以一个名为固定矩阵的二维常数数组,以获得相应的输出列。

4.加轮密钥(addroundkey)

这一步是使用密钥的唯一步骤,128位密钥也是按44矩阵排列的。

输入数组的每一个字节a[i,j]都与键对应位置的字节k[i,j]异或一次,生成输出值b[i,j]。

需要补充的是,每一轮加密使用的密钥是不一样的。这里涉及到一个概念:keyexpansions。

扩展密钥(keyexpansions)

aes源代码中,用一个长度为4 * 4 *(10 ^ 1)字节的数组w来存储所有回合的密钥。w{0-15}的值等于原始键的值,用于为初始回合进行处理。

从w[i-4]和w[i-1]开始计算每个后续元素w[i],直到数组w的所有元素都被赋值。

w阵中,第一轮用w{0-15},第一轮用w{16-31},第二轮用w{32-47},直到最后一轮(第10轮)用w{160-175}。

n/pgc-image/15269961790363 db 28 c 067d . png "

1.ecb模式

ecb模式(电子码本书)是最简单的工作模式,其中每个明文块的加密是完全独立的,互不干扰。

这样有什么好处?

1.简单

2.有利于并行计算

缺点也很明显:

同一个明文块加密后会变成同一个密文块,所以安全性差。

2.cbc模式

cbc模式(密码块链接)引入了一个新概念:初始化向量iv。

静脉注射是用来做什么的?它的作用类似于md5的“盐析”,目的是防止同一个明文块一直被加密成同一个密文块。

从图中可以看出,cbc模式会在加密每个明文块之前,先将明文块和一个值异或。iv作为初始化变量,参与第一个明文块的异或运算,每个后续明文块与其前一个明文块所加密出的密文块.不同

这样,同一明文块加密的密文块就明显不同了。

cbc模式有什么好处?

安全性更高

缺点也很明显:

1.无法并行计算,性能不如ecb

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

aes是什么意思(每天一算法:什么是aes算法)

相关文章

猜你喜欢

反馈