PKCS7Padding & PKCS5Padding
分组加密算法CBC模式中经常涉及到padding的情况。PKCS7Padding和PKCS5Padding的规则其实是一样的。
例如3DES,AES,Blowfish这些分组加密算法,要求数据块的大小是一定字节对齐的。
拿AES-128-CBC来说,要求输入是128/8=16字节对齐的,它使用PKCS7Padding,规则是:
- 计算输入长度为L。
- 如果L是16倍数,padding长度为16,padding值为0x10。即在输入后面补齐16字节的0x10。
- 如果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,具体补齐规则参考 这里。