IOS中的AES加密算法
来源:互联网 发布:mac 获取当前目录路径 编辑:程序博客网 时间:2024/05/17 07:40
AES算法是一种对称的加密算法,只要有密钥就可以解密加密后的数据。ios中的具体实现如下:
+(NSData *)AESEncryptWithKey:(NSString *)key andData: (NSString *)sourceString{ // 'key' should be 32 bytes for AES256, will be null-padded otherwise char keyPtr[kCCKeySizeAES128+1]; // room for terminator (unused) bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) // fetch key data [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSData *data = [sourceString dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; //See the doc: For block ciphers, the output size will always be less than or //equal to the input size plus the size of one block. //That's why we need to add the size of one block here size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, NULL /* initialization vector (optional) */, [data bytes], dataLength, /* input */ buffer, bufferSize, /* output */ &numBytesEncrypted); if (cryptStatus == kCCSuccess) { //the returned NSData takes ownership of the buffer and will free it on deallocation return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); //free the buffer; return nil;}
+(NSData *)AESDecryptWithKey:(NSString *)key andData: (NSString *)sourceString{ // 'key' should be 32 bytes for AES256, will be null-padded otherwise char keyPtr[kCCKeySizeAES128+1]; // room for terminator (unused) bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) // fetch key data [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSData *data = [sourceString dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; //See the doc: For block ciphers, the output size will always be less than or //equal to the input size plus the size of one block. //That's why we need to add the size of one block here size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, NULL /* initialization vector (optional) */, [data bytes], dataLength, /* input */ buffer, bufferSize, /* output */ &numBytesDecrypted); if (cryptStatus == kCCSuccess) { //the returned NSData takes ownership of the buffer and will free it on deallocation return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); //free the buffer; return nil;}
0 0
- IOS中的AES加密算法
- java 中的 aes 加密算法
- iOS开发-数据加密算法AES
- Android中的AES加密算法解析
- iOS加密算法(DES、AES、MD5、SHA512、Base64)
- IOS,ANDROID,.NET通用AES加密算法
- iOS,Android,WP, .NET通用AES加密算法
- iOS,Android,WP, .NET通用AES加密算法
- 【加密/解密】Botan 中的 AES 加密算法实例
- 【加密/解密】Botan 中的 AES 加密算法实例
- AES加密算法
- AES加密算法
- AES加密算法
- AES加密算法
- AES加密算法
- AES 加密算法
- aes加密算法
- AES加密算法
- NYOJ 269 VF (在1到10^9范围内找各个位数相加等于S的种数)
- 同步、异步、多线程
- List<Map<String,Object>>排序
- oracle中关于数据库、schame、user、table、DBA的形象解释
- POJ 1410Intersection 计算几何 判断线段与矩形位置
- IOS中的AES加密算法
- 记录Linux一些常用操作命令
- 新华北网安装方法20160513
- axis
- MySQL索引注意的几个地方
- Android Dev Intro - Android Activity Lifecycle
- 第一节课作业
- tuxedo解决了什么问题
- 并不常用又难记英文单词!