// // Copyright © 2017年 dahua. All rights reserved. // #import "NSData+AES.h" #import #import @implementation NSData (AES) //加密 - (NSData *)lc_AES256CBCEncryptWithKey:(NSString *)key iv:(NSString *)iv { return [self AES256CBCOperation:kCCEncrypt key:key iv:iv]; } - (NSData *)lc_AES256CBCDecryptWithKey:(NSString *)key iv:(NSString *)iv { return [self AES256CBCOperation:kCCDecrypt key:key iv:iv]; } #pragma mark - private method - (NSData *)AES256CBCOperation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES256 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength: sizeof(keyPtr) encoding:NSUTF8StringEncoding]; // IV char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; size_t bufferSize = [self length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, ivPtr, [self bytes], [self length], buffer, bufferSize, &numBytesEncrypted); if(cryptorStatus == kCCSuccess) { NSLog(@"AES256operation Success %u", operation); return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; }else { NSLog(@"AES256operation Error %u", operation); } free(buffer); return nil; } @end