分组密码算法在电码本模式(ECB)以及密文链接模式(CBC)下,当原文分组数据块与规定分组长度不一致时,需要进行填充处理。比如分组长度为8个单位,当前数据长度为6个单位,那么就要填充2个单位,使之程度等于8个单位。
填充方式主要有5种:
-
非强制补0x80,使得MSG’:=(MSG||‘80’||‘00’||…||‘00’)凑足分组长度整数倍
比如:
分组长度为8个字节
原始数据10个字节: FF FF FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00
-
强制补0x80,使得MSG’:=(MSG||‘80’||‘00’||…||‘00’)凑足分组长度整数倍
分组长度为8个字节
原始数据10个字节: FF FF FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00
-
非强制补0x00,使得MSG’:=(MSG||‘00’||‘00’||…||‘00’)凑足分组长度整数倍
-
分组长度为8个字节
原始数据10个字节: FF FF FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00
-
强制补0x00,使得MSG’:=(MSG||‘00’||‘00’||…||‘0X’)凑足分组长度整数倍,X取值0x01-0x10
-
分组长度为8个字节
原始数据10个字节: FF FF FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 06
-
PKCS#5,MSG的右端添加N-(||MSG||%N)个PAD字符,每个字符取值为N-(||MSG||%N)
分组长度为8个字节
原始数据10个字节: FF FF FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06
原始数据8个字节: FF FF FF FF FF FF FF FF
填充后数据16个字节: FF FF FF FF FF FF FF FF 08 08 08 08 08 08 08 08
-
5- 不填充,外部数据应为算法的分组长度的整数,否则会报错