DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而
分组密码的迭代方法就称为分组密码"模式"。
分组密码有很多模式,如果模式选择不当,就无法充分保证机密性。
分组密码:每次只能处理特定长度的一块数据的一类密码算法,这里的"一块"就称为分组。此外,一个分组的比特数就称为分组长度。
流密码:对数据流进行连续处理的一类密码算法。流密码中一般以1bit、8bit、32bit等为单位进行加密存储。
一次性密码属于流密码,DES、3DES、AES等大部分对称密码算法都是分组密码。
ECB(Electronic CodeBook mode):电子密码本模式
CBC(Cipher Block Chaining mode):密码分组链模式
CFB(Cipher FeedBack mode):密码反馈模式
OFB(Output FeedBack mode):输出反馈模式
CTR(CounTeR mode):计时器模式
ECB(Electronic CodeBook):将明文分组加密后结构直接加密成密文。
注意:当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。
所以说,如果中间人瞎几儿改数据,不要改到最后一个分组的。接收端都可以进行正常的解密。
CBC(Cipher Block Chaining):首先将明文分组之前与前一个密文分组进行XOR运算,然后再进行加密。
注意:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),缩写为IV。一般每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
注意:在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据,使其凑满一个分组长度。
注意:SSL/TLS,就是使用CBC模式来确保通信的机密性,如CBC模式中的三重DES为3DES_EDE_CBC,CBC模式256比特AES为AES_256_CBC。
CFB(Cipher FeedBack):前一个密文分组会被送回到密码算法的输入端。
CFB与CBC的区别在于,CFB会把分组的密文再进行加密后,参与下一个分组的加密。
OFB(Output-Feedback):密码算法的输出会反馈到密码算法的输入中。
CTR(CounTeR):是一种通过将逐次累加的计算器进行加密来生成密钥流的流密码。每一个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。
注意:每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能是下面这样的形式:
在加密的过程中,计数器的值会产生如下的变化。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq78442761/article/details/120964873
内容来源于网络,如有侵权,请联系作者删除!