赞
踩
分组密码解决了这个问题。分组密码(block cipher)是将明文消息编码表示后的数字(简称明文数字)序列划分成长度为 n 个组,每个组有 m 个字节。每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列
分组密码加密固定长度的分组,需要加密的明文长度可能超过分组密码的分组长度,此时就需要对分组密码算法进行迭代,以便将长明文进行加密,迭代的方法就称为分组密码的模式
ECB模式是将明文消息分成固定大小的分组,当最后一个分组的内容小于分组长度时,需要用特定的数据进行填充以至于长度等于分组长度,每个分组的加密和解密都是独立的,可以进行并行操作。
使用 ECB 模式加密时,相同的明文分组会转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此 ECB 模式也称为电子密码模式,但是安全性较低
默认模式,数据按照 8 个字节一段进行加密或解密得到一段 8 个字节的密文或者明文,最后一段不足 8 个字节,则不足 8 个字节进行计算,之后按照顺序将计算所的数据连在一起即可,各段数据之间互不影响
PKCS7Padding(PKCS5Padding)填充方式:为.NET 和 JAVA 的默认填充方式,对加密数据字节长度对 8 取余为r ,如 r 大于 0,则补 8-r个字节,字节为 8-r 的值;如果r 等于 0,则补 8 个字节 8.
比如:
加密字符串为 AAA,则补位为 AAA55555
加密字符串为 BBBBBB,则补位为 BBBBBB22
加密字符串为 CCCCCCCC,则补位为 CCCCCCCC88888888
CBC 模式中的第一个分组需要用初始化向量 IV (一个随机的且长度的比特序列)进行异或操作再进行加密,而后的每一个分组都要先和前一个分组加密后的密文分组进行异或操作,然后再加密。加密时连续的,不能进行并行操作。无法对单独一个中间的明文分组加密;对初始化向量没有加密。当 CBC 模式中的密文分组有一个分组损坏,只要密文分组的长度没有变化,解密时最多会有两个分组受到数据损坏的影响。当 CBC 的密文分组中有一些比特缺失了,导致密码分组的长度发生变化,此分组发生错位,在缺失比特位置之后的密文分组也就无法全部解密了
CFB 模式是将前一个分组的密文加密后和当前分组的明文进行异或操作生成当前分组的密文,第一个明文分组通过初始化向量 IV 进行加密再与之进行异或操作得到第一个密文分组。CFB 模式中有密码算法产生的比特序列成为密钥流(在 CFB 中密码算法相当于伪随机数生成器),在 CFB 中分组密码算法在解密时仍执行加密操作(因为密钥流通过加密生成)。对 CFB 模式可实施重放攻击
OFB 模式是通过将明文分组和密码算法的输出进行异或操作来产生密文分组的,也需要使用初始化向量 (IV)。密码算法的输出会反馈到密码算法的输入中,并非通过密码算法加密文分组的,而通过将明文分组和密码算法的输出进行 XOR 来产生密文分组(与 CFB 的区别在于密码算法的输入)。CFB 是对密文分组进行反馈,必须按顺序进行加密;OFB 是对密钥流进行加密(生成密钥流与 XOR 运算可以并行)
在 CTR 模式中,每次加密时都会生成一个不同的值来作为计数器的初始值,每个分组对应一个逐次累加的计数器,通过对计数器进行加密来生成密钥流,再将密钥流与明文分组进行异或操作得到密文分组
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。