AES加密/解密 IOS 端,JAVA端 通用,不限明文字符长度
2015-11-25 12:42
489 查看
测试发现,当前问题是:
明文字符长度<=15时, IOS 端的 AES 加密结果和 JAVA 端是一样的
明文字符长度>15时, IOS 的加密和 JAVA 的加密是不同的, 但都可以在各自语言中成功解密
解决办法就不说了,直接上代码
最重要的部分是这一句的 kCCOptionPKCS7Padding | kCCOptionECBMode ,
一般网上的只会有其中一个,导致加密明文>15个字符时,结果和 JAVA 的加密结果不同.
具体原因~希望有大牛可以解惑!
明文字符长度<=15时, IOS 端的 AES 加密结果和 JAVA 端是一样的
明文字符长度>15时, IOS 的加密和 JAVA 的加密是不同的, 但都可以在各自语言中成功解密
解决办法就不说了,直接上代码
- (NSData *)AESOperation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv aesType:(AesType)aesType { NSUInteger aesKeySizeType; NSUInteger aesBlockSizeType = kCCBlockSizeAES128; CCAlgorithm aesAlgorithmType = kCCAlgorithmAES128; switch (aesType) { case kAesType128: aesKeySizeType = kCCKeySizeAES256; break; case kAesType192: aesKeySizeType = kCCKeySizeAES192; break; case kAesType256: aesKeySizeType = kCCKeySizeAES256; break; default: aesKeySizeType = kCCKeySizeAES256; break; } char keyPtr[aesKeySizeType + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[aesBlockSizeType + 1]; memset(ivPtr, 0, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + aesBlockSizeType; void *buffer = malloc(bufferSize); size_t numBytesCrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(operation, aesAlgorithmType, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, aesBlockSizeType, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesCrypted); NSData *data = nil; if (cryptStatus == kCCSuccess) { data = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted]; } return data; }
最重要的部分是这一句的 kCCOptionPKCS7Padding | kCCOptionECBMode ,
CCCryptorStatus cryptStatus = CCCrypt(operation, aesAlgorithmType, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, aesBlockSizeType, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesCrypted);
一般网上的只会有其中一个,导致加密明文>15个字符时,结果和 JAVA 的加密结果不同.
具体原因~希望有大牛可以解惑!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序