分组加密算法CBC模式中经常涉及到padding的情况。PKCS7Padding和PKCS5Padding的规则其实是一样的。

例如3DES,AES,Blowfish这些分组加密算法,要求数据块的大小是一定字节对齐的。

拿AES-128-CBC来说,要求输入是128/8=16字节对齐的,它使用PKCS7Padding,规则是:

  1. 计算输入长度为L。
  2. 如果L是16倍数,padding长度为16,padding值为0x10。即在输入后面补齐16字节的0x10。
  3. 如果L不是16倍数,padding长度为16-L%16,padding值为16-L%16。即在输入后面补齐16-L%16的字节,值为16-L%16。

2和3其实可以根据公式 16-L%16 写成一条规则,这里只是强调2的特殊性,明确并不是不做补齐。

PKCS5Padding是专门针对8字节分组的3DES等设计的,规则和上面一样,只是计算时看L是否是8的倍数。

另外,RSA算法存在PKCS1Padding,具体补齐规则参考 这里