CFB 模式(先加密再异或)CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文

特点:

分组长度取决于加密算法。
需要初始化向量,长度必须与明文分组相同。
先对密文进行加密,然后再与明文分组进行异或。(CBC是先异或,再加密)
由于没有直接对明文分组进行加密,所以不需要填充

– 注意,解密的时候,是对初始向量进行加密操作,这样才能得到同样的数据

所谓反馈,这里指的就是返回输入端的意思,即前一个密文分组会被送回到密码算法的输入端。

CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。

在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。(加密的是上一次的密文,而不是本次的明文)

从上图可以看出,明文分组和密文分组之间并没有经过”加密”这一步骤。在CFB模式中,明文分和密文分组之间只有一个XOR。

我们将CBC模式与CFB模式对比一下,就可以看出其中的差异了(如下图)。在CBC模式中,明文分组和密文分组之间有XOR和密码算法两个步骤,而在CFB模式中,明文分组和密文分组之间则只有XOR。

初始化向量

在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量(IV)来代替,这一点和CBC模式是相同的。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。

CFB模式与流密码

CFB模式是通过将“明文分组”与“密码算法的输出”进行XOR运算来生成“密文分组”的。

在CFB模式中,密码算法的输出相当于一个随机比特序列。由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不可能具各理论上不可破译的性质。

CFB模式中由加密算法所生成的比特序列称为密钥流(key stream)。在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子“。

在CFB模式中,明文数据可以被逐比特加密,因此我们可以将CFB模式看做是一种使用分组密码来实现流密码的方式

CBC与CFB区别