2024年4月16日发(作者:)

明文填充(padding)

1.如果明文长度不是算法所要求的块长度的整数倍,怎么办?

答:使用填充(Padding)共有5种类型的填充.

方法一:所有的字节均使用一个相同的值进行填充,而这个值是用来表示需

要填充的字节的总个数.相对应的padding模式

有:PKCS5,PKSC7,CMS(Cryptographic Message Syntax),其中PKCS5中Block =

8bytes,而PKCS7 的Block可达(1-255)g特点:对于

Block=8bytes(64bits块)进行填充字节的值的取值范围在[1, 8].解码过程中,

从最后一个字节看起,首先确定它表示的值1<=n<=8,然后检验最后n个字节的值

是否相同,若相同最后删去最后n个字节即可得到完整的信息.特殊情

况:plaintext恰好够分成完整的块,不多不少.则最后8个字节为: (IN HEX)

08 08 08 08 08 08 08 08

方法二:以ox80和ox00构成的字节序列填充,ox80只出现在最前面,且仅仅

只出现一次且必须出现,剩下的字节以0x00填充.

特殊情况:plaintext恰好够分成完整的块,不多不少.则最后8个字节为:

(IN HEX)80 00 00 00 00 00 00 00

方法三:填充序列(除最后一个字节外)均以0x00填充,填充序列的最后一个

字节记录填充序列的长度.特点:与方法一类似,对于Block=8bytes(64bits块)

进行填充字节的值的取值范围在[1, 8].解码过程中,从最后一个字节看起,首先

确定它表示的值1<=n<=8,然后检验最后n个字节剩下的n-1个字节的值是否相

同均为0x00,若相同最后删去最后n个字节即可得到完整的信息.特殊情

况:plaintext恰好够分成完整的块,不多不少.则最后8个字节为: (IN HEX)00

00 00 00 00 00 00 08

方法四:全以0x00填充.

特点: 对于ASCII文本解密过程中0x00(null)无需特殊处理,但对有可能用

到null的.exe文件,就很难处理掉null(由于没有记录填充长度的数据).特殊情

况:plaintext恰好够分成完整的块,不多不少.则无需在最后多添加冗余的8个

字节.

方法五:全以0x20填充

特点: 对于ASCII文本解密过程中0x00(null)无需特殊处理.

特殊情况:plaintext恰好够分成完整的块,不多不少.则无需在最后多添加冗余

的8个字节.另外,Random Padding 可以隐藏数据信息,而填充的地方也不仅仅用

在最后的一块中.

rd == key?

rd直接用于加密?

答:不能

b.如果password不够算法要求的长度怎么办?

答:hash散列,由于常见的hash散列算法,如MD5能把一个任意长度的字符串变

成一定长的十六进制数字串.对于同一种算法而言,而这种转换是唯一对应的,如

1

页 共 1 页

空串MD5所对应的计算出来的值MD5("")=d41d8cd98f00b204e9800998ecf8427e

是不会变的,所以从password到key的转换虽然满足了长度要求,但安全性依然

不高.

解决办法是多次进行hash迭代(不少于1000次),同时使用salting(通过随机产

生的字节填充原密码).但一个强有力密码,仍十分的重要.

2

页 共 2 页