iOS开发 关于AES256配合base64加密
于服务器方商量加密策略,使用aes256+base64,大多数网上这一整套都有详细的代码,但是不小心就是个大坑,摔好疼。
static NSString *base64_encode_data(NSData *data){
data = [data base64EncodedDataWithOptions:0];
NSString *ret = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return ret;
}
static NSData *base64_decode(NSString *str){
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
return data;
}
这是base64的代码,系统的所以相当简单。
下面说aes256的
![](https://img.haomeiwen.com/i3693828/ee3260d7618fe19d.png)
大多数都是这样的加密代码,java服务器要求设置iv向量,于是兴高采烈的设置了下方的NULL,你看iOS的api就是如此便利,简单搞定。咦!!!服务器解不了?什么鬼
char ivPtr[kCCKeySizeAES128+1];
memset(ivPtr, 0, sizeof(ivPtr));
[movestring getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
上边是设置ivPstr的方法,movestring是与服务器约定的向量字串,可是,哪里不对,服务器说解不了啊,可以用不加向量的方法解开你的假面。。。。。难道我打开了假的aes256?
自己试试,加密使用向量,解密不使用向量。。。。。。解开了,标识泪流满面,什么鬼,原来向量是假的,后来才看到java的padding和Kccoptionmode都与iOS不同,去除ECBmode后 会默认成为CBCmode,这下终于可以了。代码如下:
![](https://img.haomeiwen.com/i3693828/8df6e8035293f14d.png)