欢迎来到天天文库
浏览记录
ID:39549465
大小:36.00 KB
页数:4页
时间:2019-07-06
《iOS AES128 CBC No Padding加密解密》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、最近的项目中数据传输用到加密,项目选择了AES128CBCNoPadding加密方式,PHP和Android方面的代码网上太多了。但是唯独没有iOS的,但是也有别的写法,但不是是AES128CBCNoPadding或者不是CBCNoPadding。自己仿照着写了个,不过PHP端总是解密不出。问题就处在NoPadding.NoPading的情况下,一定要对加密数据不是kCCKeySizeAES128倍数部分进行0x0000的填充,不然加密长度不正确,一般情况下选择使用kCCOptionPKCS7Padding(也就是0x0001)进行填充,但是我们是NoPadding所以要用
2、0x0000填充。加密后再对加密数据进行了Base64加密,用到了google的GTMBase64,没有的网上自己找,下面上ios的代码:DES3Util.h内容////DES3Util.h//JuziAnalyticsDemo////Createdbywanyakunon13-6-6.//Copyright(c)2013年The9.Allrightsreserved.//#import@interfaceDES3Util:NSObject+(NSString*)AES128Encrypt:(NSString*)plainT
3、ext;+(NSString*)AES128Decrypt:(NSString*)encryptText;@endDES3Util.m文件内容////DES3Util.m//JuziAnalyticsDemo////Createdbywanyakunon13-6-6.//Copyright(c)2013年The9.Allrightsreserved.//#import"DES3Util.h"#import#import"GTMBase64.h"#definegkey@"16位长度的字符串"//自行修改#define
4、gIv@"16位长度的字符串"//自行修改@implementationDES3Util+(NSString*)AES128Encrypt:(NSString*)plainText{charkeyPtr[kCCKeySizeAES128+1];memset(keyPtr,0,sizeof(keyPtr));[gkeygetCString:keyPtrmaxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];charivPtr[kCCBlockSizeAES128+1];memset(ivPtr,0,sizeof(ivPtr
5、));[gIvgetCString:ivPtrmaxLength:sizeof(ivPtr)encoding:NSUTF8StringEncoding];NSData*data=[plainTextdataUsingEncoding:NSUTF8StringEncoding];NSUIntegerdataLength=[datalength];intdiff=kCCKeySizeAES128-(dataLength%kCCKeySizeAES128);intnewSize=0;if(diff>0){newSize=dataLength+diff;}chardataPtr[n
6、ewSize];memcpy(dataPtr,[databytes],[datalength]);for(inti=0;i7、8,0x0000,//NopaddingkeyPtr,kCCKeySizeAES128,ivPtr,dataPtr,sizeof(dataPtr),buffer,bufferSize,&numBytesCrypted);if(cryptStatus==kCCSuccess){NSData*resultData=[NSDatadataWithBytesNoCopy:bufferlength:numBytesCrypted];return[GTMBase64stringByEncodingData:resultData
7、8,0x0000,//NopaddingkeyPtr,kCCKeySizeAES128,ivPtr,dataPtr,sizeof(dataPtr),buffer,bufferSize,&numBytesCrypted);if(cryptStatus==kCCSuccess){NSData*resultData=[NSDatadataWithBytesNoCopy:bufferlength:numBytesCrypted];return[GTMBase64stringByEncodingData:resultData
此文档下载收益归作者所有