Openssl中AES加解密——CBC模式

因工作需要接触了一端是见AES,一些需要注意的地方提醒一下新手,少走一些弯路(个人开发遇到的问题,不对专业名词进行解释)。本人C++开发,所以此文章倾向于C++。

使用Openssl实现的CBC的加解密,所需的Openssl库、头文件和封装类见文章底部。

文章模块:
1、填充模式
2、数据块
3、密码和偏移量
4、输出base64
5、加密模式
6、方法介绍
个模块简单介绍(只涉及本人所理解的):
1、填充模式:PKCS5、PKCS7、NOPADDING(ZEROPADDING)等
首先Openssl中的CBC模式默认填充方式是NOPADDING,其他填充方式需要自己实现(入坑一天)。
NOPADDING:本人加解密时的数据块是128位,对应字节大小是16位(64—>8)。对加密数据进行长度判断。除以16,看余数是否为零,若为零不需要填充,不为零CBC模式默认填充位'\0'。
PKCS5:除以16,看余数是否为零,若为零不需要填充,不为零,填充为(16-余数)的十六进制,看代码。

void CAes::Padding(char* pSrc, int nSrcLen, int nPadLen)
{
unsigned char ucPad = nPadLen - nSrcLen;
for (int nID = nPadLen; nID > nSrcLen; --nID)
{
pSrc[nID - 1] = ucPad;
}
}

2、base64编码
因为对接的是java,所以这边需要一些base64的编解码操作,具体原因自己查。后面会附上代码
3、方法介绍
Openssl封装很好,解密、加密个需要两个函数就可以搞定。需要注意的时,偏移量每次加解密操作以后需要重新赋值。
4、密码和偏移量
忘了从哪看到的,要采用16位(不带'\0'的16位有效字符),没有验证。
加密模式和数据块不在介绍,了解不多。
附加文件:
Openssl(忘了从哪位前辈csdn下载的,先谢过)
封装类
地址:http://download.csdn.net/download/qq_34534425/10142029

你可能感兴趣的:(C++,Aes)