密码算法特性

1.凯撒密码

凯撒密码是一种替换字码的目标就是加密文本,其实思路非常简单:将字表表中的一个字符用另一个字符替换,加密是通过将前字母替换为在常规字母表中第n个位置后的弟3时相下来完成。例如,当选择n=3时,这个替换(其中n相当于**)如下

          

 

二、.序列密码

Enigma与既散密码一样属于→种换位密码,换位密码非常容易被**,例如:蛮力攻击或穷尽密码搜索,攻击者通过信道窃听获得密文,在恺撒密码中,**就是字母表平移的字数。由于字母表只有26个字母,因此加密用的**只有0到25共26种。虽然 Enigma是随机换位,但是依然能通过字母频率分析出内容。

因此,为了更安全的加密,出现了序列密码这种加密方法,序列密码的特点是将明文和**进行异或运算,如:明文a,ASCL码为97,二进制码01100001:**为B,ASCL码为66,二进制码01000010,然后在按位异或序列密码用于单独加密每个位。它是通过将**序列中的每个位与每个明文位相加实现的。
 

     明文

0

1

1

0

0

0

0

1

     **

0

1

0

0

0

0

1

0

     密文 0 0 1 0 0 0 1 1

三、分组密码

 

1.分组密码

分组密码( block cipher)是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n个组,每个组有m个字节。每组分别在**的控制下变换成等长的输出数字简称密文数字)序列

分组密码加密固定长度的分组,需要加密的明文长度可能超过分组密码的分组长度,此时就需要对分组密码算法进行迭代,以便将长明文进行加密,迭代的方法就称为分组密码的模式

1.2如何分组

1)ECB模式(电子密码本模式)

ECB模式是将明文消息分成固定大小的分组,当最后一个分组的内容小于分组长度时,需要用特定的数据进行填充以至于长度等于分组长度,每个分组的加密和解密都是独立的,可以进行并行操作。使用ECB模式加密时,相同的明文分组会转换为相同的密文分组,也就是说,我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表,因此ECB模式也称为电子密码本模式,但是安全性较低

默认模式,数据按照8个字节一段进行加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节来进行计算,之后按照顺序将计算机所得的数据连在一起即可,各段数据之前互不影响

PKCS7Padding(PKCS5Padding)填充方式:为.NET和JAVA的默认填充方式,对加密数据字节长度对8取余为r,如r大于0,则补8-r的值;如果r=0,则补8个字节8比如

加密字符串为AAA,则补位为AAA55555

加密字符串为BBBBBB,则补位为BBBBBB22

加密字符串为CCCCCCCC,则补位为CCCCCCCC88888888

2)CBC模式(密码分组链接模式)

CBC模式中的第一个分组需要用初始化向量IV(一个随机的且长度为个分组长度的比特序列)进行异或操作再进行加密,而后面的每一个分组都要先和前一个分组加密后的密文分组进行异或操作,然后再加密。加密是连续的,不能进行并行操作。无法对单独一个中间的明文分组加密;对初始化向量没有加密。当CBC模式中的密文分组有一个分组损坏,只要密文分组的长度没有发生变化,解密时最多会有两个分组受到数据损坏的影响。当CBC的密文分组中有一些比特缺失了,导致密码分组的长度发生变化,此分组发生错位,在缺失比特位置之后的密文分组也就无法全部解密了


3)CFB模式(密文反馈模式

CFB模式是将前一个分组的密文加密后和当前分组的明文进行异或操作生成当前分组的密文,第一个明文分组通过初始化向量V进行加密再与之进行异或操作得到第一个密文分组。CFB模式中有密码算法产生的比特序列成为**流(在CFB中密码算法相当于伪随机数生成器),在CFB中分组密码算法在解密时仍执行加密操作(因为**流通过加密生成)对CFB模式可实施重放攻击

4)OFB模式(输出反馈模式)

CFB模式是通过将明文分组和密码算法的输出进行异或操作来产生密文分组的,也需要使用初始化向量(IV)。密码算法的输出会反馈到密码算法的输入中,并非通过密码算法加密明文分组的,而通过将明文分组和密码算法的输出进行XOR来产生密文分组(与CFB的区别在于密码算法的输入)。CFB是对密文分组进行反馈,必须按顺序进行加密:OFB是对**流进行加密(生成**流与XOR运算可以并行)

5)CRT(计数器模式)

CRT模式中,每次加密时都会产生成一个不同的值来作为计数器的初始值,每一个分组对应一个逐次累加计算器,通过对计算器进行加密来生成**流,在将**流,与明文分组进行异或操作得到密文分组