· 9 years ago · Nov 09, 2016, 10:32 AM
1NSString* testString = @"TestTest";
2NSString* secretKey = @"asdfsadf";
3
4NSData *reqStringData = [testString dataUsingEncoding:NSUTF8StringEncoding];
5
6NSData *encryptedData = [reqStringData AES128EncryptedDataWithKey:secretKey];
7NSString * encryptedString = [[NSString alloc] initWithData:encryptedData encoding:kCFStringEncodingUTF8];
8
9NSData *decryptedData = [[encryptedString dataUsingEncoding:kCFStringEncodingUTF8] AES128DecryptedDataWithKey:secretKey];
10NSString * decryptedString = [[NSString alloc] initWithBytes:[decryptedData bytes] length:[decryptedData length] encoding:kCFStringEncodingUTF8];
11
12NSLog(@"%@", decryptedString);
13
14- (NSData *)AES128DecryptedDataWithKey:(NSString *)key
15{
16 return [self AES128DecryptedDataWithKey:key iv:nil];
17}
18
19- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv
20{
21 char keyPtr[kCCKeySizeAES128 + 1];
22 bzero(keyPtr, sizeof(keyPtr));
23 [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
24
25 char ivPtr[kCCBlockSizeAES128 + 1];
26 bzero(ivPtr, sizeof(ivPtr));
27
28 if (iv) {
29 [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
30 }
31
32 NSUInteger dataLength = [self length];
33 size_t bufferSize = dataLength + kCCBlockSizeAES128;
34 void *buffer = malloc(bufferSize);
35
36 size_t numBytesEncrypted = 0;
37 CCCryptorStatus cryptStatus = CCCrypt(operation,
38 kCCAlgorithmAES128,
39 kCCOptionPKCS7Padding | kCCOptionECBMode,
40 keyPtr,
41 kCCBlockSizeAES128,
42 ivPtr,
43 [self bytes],
44 dataLength,
45 buffer,
46 bufferSize,
47 &numBytesEncrypted);
48 if (cryptStatus == kCCSuccess) {
49 return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
50 }
51
52 free(buffer);
53 return nil;
54}