工作模式和填充

Posted by Charlie on 2019-06-03

1.分组加密

块加密,英文Block Cyper,又称分组加密,是一种常见的对称加密,具有代表性的块加密有DES,AES,3DES等。块加密的工作模式允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。

2.工作模式

主要用于 AES、DES 算法

ECB-电子密码本模式

又称电子密码本模式:Electronic codebook,是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,每块加密结果进行拼接即为最终加密结果。解密同理。

以 DES/ECB/NOPadding 算法为例,进行验证

1
2
3
4
源1:1234567812345678
源2:8765432187654321
源3:12345678123456788765432187654321
key: 1234567812345678

分别对以上3个源串(hex)做加密,结果为

1
2
3
密文1: 738189139E0B66E1
密文2: 733DDA445B785CE7
密文3: 738189139E0B66E1733DDA445B785CE7

可以发现,(密文3 = 密文1 + 密文2),与 (源3 = 源1 + 源2 )是能够呼应的。

以 AES/ECB/NOPadding 算法为例,进行验证

1
2
3
4
源1:12345678123456781234567812345678
源2:87654321876543218765432187654321
源3:1234567812345678123456781234567887654321876543218765432187654321
key: 12345678123456781234567812345678

分别对以上3个源串(hex)做加密,结果为

1
2
3
密文1: D7EEEE18C420FAF0DC7DB5CA73A2B817
密文2: 7CCEAE7C4561A2D5C8BA807BF4C13FCE
密文3: D7EEEE18C420FAF0DC7DB5CA73A2B8177CCEAE7C4561A2D5C8BA807BF4C13FCE

可以发现,(密文3 = 密文1 + 密文2),与 (源3 = 源1 + 源2 )是能够呼应的。

缺点 :在于同样的明文块会被加密成相同的密文块;因此,它不能很好的隐藏数据模式。在某些场合,这种方法不能提供严格的数据保密性,因此并不推荐用于密码协议中。

img

CBC-密码分组链接模式

密码分组链接(CBC,Cipher-block chaining)模式,由IBM于1976年发明,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量IV。

CBC是最为常用的工作模式。

主要缺点: 在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。在加密时,明文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容。

img

以DES算法进行验证

1
2
3
4
5
6
7
8

源1:1234567812345678
初始化向量: 3031303230333034
key: 1234567812345678
密文1: BF34BD809BAE05A1

异或:2205664A2207664C
密文2: BF34BD809BAE05A1

首先对 源1 进行CBC模式的加密,得出密文1

其次用 源1 异或 初始化向量,在用ECB模式对异或结果进行加密,得出密文2

可以看出,密文1 = 密文2

其他模式

其他模式,如:PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8

并不常用,所以此文并不摘录,若想了解可从参考资料中自行查看

3.参考资料

https://www.cnblogs.com/starwolf/p/3365834.html

https://www.cnblogs.com/baihuitestsoftware/articles/7090134.html

https://blog.csdn.net/jerry81333/article/details/78336616