广义上从明文消息变成密文消息的方法有两种:流加密法与块加密法。
一、流加密法
流加密法技术一次加密明文中的一个位,解密时也是一位一位地进行。假设原先的明文消息为ASCII(文本格式)的“Pay 100”,则将这些ASCII字符变成相应的二进制值时,可以假设其变成01011100(为了简单起见,作此假设,由于每个字符占7个位,因此二进制文本更大)。假设采用的密钥为二进制值10010101,再假设我们的加密算法使用异或逻辑。异或逻辑,简单点数哦,只有一个输入为0,一个输入为1 时,异或运算才能得到1,否则输出为0。下表表示了异或逻辑的结果。
输入1 | 输入2 | 输出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
下图表示了采用流加密法加密的结果:
对原消息中的每个位采用密钥的一位后,传输的是二进制11001001,但其ASCII值为ZTU91^%D,攻击者不解,因此保护了信息。
异或操作的可逆性可用来恢复原值,这在加密算法中意义重大。其运用的属性就是,异或逻辑在采用一次时,可以恢复原先的数据。
二、块加密法
块加密法技术一次加密文明中的一个块,解密时也是一个块一个块的进行。假设要加密的明文为FOUR_AND_FOUR,利用块加密法,可以先加密FOUR,再加密_AND_,然后再加密FOUR,即一次加密明文中的一个块。
解密时,每个块转换回原始的格式。实际上,通信是在位上进行的,因此FOUR实际上是ASCII字符FOUR的相应二进制值。用任何加密之后,得到的位要变成相应的ASCII值,因此可能得到Vfa%之类的怪字符,对方收到二进制值后,将其译码成ASCII值FOUR的二进制形式,如下图所示:
块加密法的一个明显问题就是重复文本,对于重复文本模式,生成的密文是相同的,因此,密码分析员可以猜出原文的模式。
三、组结构
组元素是每个可能密钥构成的密文块,组表示明文生成密文时的变化次数。
四、混淆与扩散
混淆是为了保证密文中不会反映出明文线索,防止密码分析员从密文中找到模式,从而求出相应明文。混淆的方法就是使用前面介绍的替换技术。
扩散增加明文的冗余度,使其分布在行和列中,扩散的方法就是使用前面介绍的置换技术。
流加密法只使用混淆,而块加密法使用混淆和扩散。