简述
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模式
ECB(Electronic CodeBook):将明文分组加密后结构直接加密成密文。
注意:当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。
所以说,如果中间人瞎几儿改数据,不要改到最后一个分组的。接收端都可以进行正常的解密。
CBC模式
CBC(Cipher Block Chaining):首先将明文分组之前与前一个密文分组进行XOR运算,然后再进行加密。
注意:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),缩写为IV。一般每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
注意:在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据,使其凑满一个分组长度。
注意:SSL/TLS,就是使用CBC模式来确保通信的机密性,如CBC模式中的三重DES为3DES_EDE_CBC,CBC模式256比特AES为AES_256_CBC。
CFB模式
CFB(Cipher FeedBack):前一个密文分组会被送回到密码算法的输入端。
CFB与CBC的区别在于,CFB会把分组的密文再进行加密后,参与下一个分组的加密。
OFB模式
OFB(Output-Feedback):密码算法的输出会反馈到密码算法的输入中。
CTR模式
CTR(CounTeR):是一种通过将逐次累加的计算器进行加密来生成密钥流的流密码。每一个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。
注意:每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能是下面这样的形式:
在加密的过程中,计数器的值会产生如下的变化。
分组模式对比表
标签:OFB,CBC,加密,ECB,模式,明文,密码,分组 来源: https://blog.csdn.net/qq78442761/article/details/120964873
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。