Revisions
-
Kosuke Matsuda created this gist
Feb 25, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,13 @@ /** http://mythosil.hatenablog.com/entry/20111017/1318873155 http://blog.dealforest.net/2012/03/ios-android-per-aes-crypt-connection/ */ @interface NSData (AES) - (NSData *)AES128EncryptedDataWithKey:(NSString *)key; - (NSData *)AES128DecryptedDataWithKey:(NSString *)key; - (NSData *)AES128EncryptedDataWithKey:(NSString *)key iv:(NSString *)iv; - (NSData *)AES128DecryptedDataWithKey:(NSString *)key iv:(NSString *)iv; @end This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,61 @@ #import "NSData+AES.h" #import <CommonCrypto/CommonCryptor.h> @implementation NSData (AES) - (NSData *)AES128EncryptedDataWithKey:(NSString *)key { return [self AES128EncryptedDataWithKey:key iv:nil]; } - (NSData *)AES128DecryptedDataWithKey:(NSString *)key { return [self AES128DecryptedDataWithKey:key iv:nil]; } - (NSData *)AES128EncryptedDataWithKey:(NSString *)key iv:(NSString *)iv { return [self AES128Operation:kCCEncrypt key:key iv:iv]; } - (NSData *)AES128DecryptedDataWithKey:(NSString *)key iv:(NSString *)iv { return [self AES128Operation:kCCDecrypt key:key iv:iv]; } - (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES128 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); if (iv) { [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; } NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil; } @end