时间: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,增加复杂度。
相关文章
怀孕周期
备孕分娩婴儿早教
猜你喜欢