//
|
// Copyright © 2016年 dahua. All rights reserved.
|
//
|
|
#import "NSData+LeChange.h"
|
|
#import <CommonCrypto/CommonDigest.h>
|
#import <CommonCrypto/CommonCryptor.h>
|
|
@implementation NSData (AES)
|
|
//加密
|
- (NSData *)lc_AES256Encrypt:(NSString *)key
|
{
|
char keyPtr[kCCKeySizeAES256+1];
|
bzero(keyPtr, sizeof(keyPtr));
|
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
|
NSUInteger dataLength = [self length];
|
size_t bufferSize = dataLength + kCCBlockSizeAES128;
|
void *buffer = malloc(bufferSize);
|
size_t numBytesEncrypted = 0;
|
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
|
kCCOptionPKCS7Padding | kCCOptionECBMode,
|
keyPtr, kCCBlockSizeAES128,
|
NULL,
|
[self bytes], dataLength,
|
buffer, bufferSize,
|
&numBytesEncrypted);
|
if (cryptStatus == kCCSuccess) {
|
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
|
}
|
free(buffer);
|
return nil;
|
}
|
|
//解密
|
- (NSData *)lC_AES256Decrypt:(NSString *)key
|
{
|
char keyPtr[kCCKeySizeAES256+1];
|
bzero(keyPtr, sizeof(keyPtr));
|
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
|
NSUInteger dataLength = [self length];
|
size_t bufferSize = dataLength + kCCBlockSizeAES128;
|
void *buffer = malloc(bufferSize);
|
size_t numBytesDecrypted = 0;
|
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
|
kCCOptionPKCS7Padding | kCCOptionECBMode,
|
keyPtr, kCCBlockSizeAES128,
|
NULL,
|
[self bytes], dataLength,
|
buffer, bufferSize,
|
&numBytesDecrypted);
|
if (cryptStatus == kCCSuccess) {
|
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
|
|
}
|
free(buffer);
|
return nil;
|
}
|
|
|
|
|
|
|
@end
|