Windows中文网

 找回密码
 立即注册
搜索
查看: 4814|回复: 0

ECB和CBC模式的填充

[复制链接]

19

主题

22

帖子

428

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
428
发表于 2022-10-5 16:41:57 | 显示全部楼层 |阅读模式
使用ECB和CBC模式进行加密时,如果最后一个明文分组的长度小于分组长度,就需要使用一些特定的数据进行填充(Padding),以达到分组长度;在解密密文后,不要忘记丢弃这些填充数据。
CFB、OFB和CTR模式则不需要进行填充处理,因为这些模式是将分组密码加密的输出与明文执行异或运算,最后一个明文分组(可能小于分组长度)与密钥流的前几个字节执行异或运算后,会产生与该明文分组大小相同的密文分组。流密码的这个特性使得这些模式可以应用在需要密文和明文数据长度严格相等的场合,也可以应用在以流形式传输数据而不便于进行填充的场合。
分组密码中常用的填充模式如下所示:
(1)  No Padding。不进行任何填充 ,如果明文的长度不是分组长度的整数倍则会报错。
(2)  Zero Padding。在需要的地方用值为0的字节进行填充,以达到分组长度。例如,假设最后一个分组的内容为“0x31 0x32 0x33 0x34”,并假设分组长度要求为8字节,需要填充4字节,则填充为“0x31 0x32 0x33 0x34 0x00 0x00 0x000x00”。如果明文本来就是以一个或多个值为0的字节结尾,那么该模式可能会导致无法正确恢复明文的原始长度,因为无法区分明文数据字节和填充字节。
(3)  ISO 10126。每个填充字节的值是随机数,但最后一个填充字节的值为需要填充的字节数。如果明文的长度正好是分组长度的整数倍,这种情况下需要额外填充一个分组。该模式已经不再使用。
(4)  ANSI X9.23。每个填充字节的值是0,但最后一个填充字节的值为需要填充的字节数。如果明文的长度正好是分组长度的整数倍,这种情况下需要额外填充一个分组。举个例子,假设分组长度要求为8字节,并假设最后一个明文分组的长度为3字节,这时需要填充5字节,填充内容为“0x00 0x00 0x00 0x00 0x05”。
(5)  Bit Padding。在需要进行填充的地方,首先写入一个位“1”,然后添加所需数量的位“0”,也就是二进制为“1000…0000”这样的位形式。如果明文的长度正好是分组长度的整数倍,这种情况下需要额外填充一个分组。Bit Padding所采用的填充方法使得其可以用于分组长度为任何位数的明文。有时候,可以使用该模式的一种变换用法,即在需要进行填充的地方,首先写入一个字节“0x80”,然后添加所需数量的值为0的字节。
(6)  PKCS#7 Padding。每个填充字节的值是需要填充的字节数,也就是说 ,如果需要填充n个字节 ,那么每个填充字节的值都是n。如果明文的长度正好是分组长度的整数倍,这种情况下需要额外填充一个分组,例如分组长度要求为8字节,则额外填充“0x08 0x08 0x08 0x08 0x08 0x08 0x080x08”这样一个分组 。该模式可以用于分组长度为1~255字节的密码系统,填充值为0x01~0xFF。
(7)  PKCS#5 Padding。该模式的填充方法和PKCS#7 Padding是一样的,不同的是,该模式只能用于分组长度为8字节的密码系统,填充值为0x01~0x08。从本质上说,PKCS#5 Padding是PKCS#7 Padding的子集,前者可以向上转换为后者,而后者不一定可以转换为前者。
PKCS#5 Padding和PKCS#7 Padding是应用比较普遍的两种填充模式。

回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋|Windows中文网 ( 鲁ICP备2021014210号 )

GMT+8, 2025-6-9 22:18 , Processed in 0.076785 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表