针对aes加密的c实现过程,一般会用到补位。aes加密的原数据长度要求是16的整数倍,但实际操作过程中并不能保证每次待加密的数据长度都能使16的整数倍,所以这时候就需要进行补位,在进行加密才能得到正确的加密数据。
c开发中常用的补位方式主要NoPadding,zeroPadding,PKCS5Padding,PKCS7Padding四种方式。其中PKCS5Padding和PKCS7Padding使用起来一样。
NoPadding:不进行补位操作,保持源数据。
zeroPadding:末尾补0操作。对于源数据长度不是16的整数倍时,在末尾补0至长度为16的整数倍;
例如:char src_buff[ MAX_LEN] = "ABCDEFGHIJKL" ;
int src_len = strlen(src_buf);
for(int i=0;i<(16-src_len%16);i++)
src_buf[src_len+i] = 0;
src_len = src_len + (16-src_len%16);
另外一种情况是源数据长度正好是16的整数倍时,需要在数据末尾补16个0.(需注意!!!!!)
PKCS5Padding :对于源数据长度不是16的整数倍时,在末尾补(16-src_len%16)至长度为16的整数倍;
例如:src_buf[ MAX_LEN] = "ABCDEF" ;
src_len = 6;
for(i=0;i<(16-src_len%16);i++)
src_buf[src_len+i] = (16-src_len%16);
src_len = src_len+(16-src_len%16);
另外一种情况是源数据长度正好是16的整数倍时,需要在数据末尾补16个16.(需注意!!!!!)
PKCS7Padding: 与PKCS5Padding使用相同。
补位方法已经经过验证,后面会再更新一篇关于c实现的AES ECB模式的加密实现源码。