1. AES填充
AES内部始终使用16 byte的分组长度!加密时,如果明文字节长度不是16的整数倍,要填充到大于该长度的最接近的16的倍数,但是如果刚好等于16的倍数,就额外在添加一个完整的分组,也就是添加16字节。具体你的例子,得到的是32字节长度的密文。细节请参考PKCS5/7,这些标准是权威指南!
假设待加密数据长度为x,那么将会在后面padding的字节数目为16-(x%16),每个padding的字节值是16-(x%16)。
特别地,当待加密数据长度x恰好是16的整数倍,也是要在后面多增加16个字节,每个字节是0x10。
给出一个PKCS#5的实现
static size_t padding(unsigned char *src, size_t srcLen)
{
// PKCS#5
size_t paddNum = 16 - srcLen % 16;