前段时间自己写客户端加密解密,查了不少资料。现在把自己写的过程记录下来,分享出去让没写过 openssl aes 的小伙伴少闹点心
闲话不说进入正题
1.AES加密和DES加密的区别这里就不提了,网上好多解释
2.AES加密的方式有很多 128 256 cbc ecb cfb 等等,这里介绍AES-128-cbc-pkcs5 加解密
你可以写一个公共的加密类 也可以给系统类写一个类的扩展 category
因为我的是给接口参数进行加密 所以我的就给NSString写了一个类扩展,如果你自己要写可根据自己情况写(比如给NSData写一个类扩展)
当时写AES的时候因为好长时间不碰C了,所以开辟空间和初始化的时候经常出问题,还有就是加密解密都是单线程的,所以加上了线程锁
解密的时候,最后不要忘了去除填充
好了不多说了直接上代码
4.AES-128-cbc-pkcs5 加密
-(NSString*)encryptAES:(NSString*)key
{
@synchronized (self) {
const char *Source;
unsigned char *InputData=NULL;
unsigned char *EncryptData=NULL;
char *DecryptData=NULL;
unsigned char Key[AES_BLOCK_SIZE+1]; //建议用unsigned char
unsigned char iv[17] = "****************"; //加密的初始化向量,加密解密要一样就行 因为CBC 是循环加密方式 所以这个地方的加密向量一定要和解密端商量好
AES_KEY AesKey;
int DataLen=0,SetDataLen=0;
NSData *dat = [self dataUsing