-
-
Save FrankWu100/8048697 to your computer and use it in GitHub Desktop.
// | |
// FWEncryptorAES.h | |
// AES Encryptor | |
// | |
// Created by FrankWu on 2013/12/20. | |
// Copyright (c) 2013年 FrankWu. All rights reserved. | |
// | |
#import <Foundation/Foundation.h> | |
@interface FWEncryptorAES : NSObject | |
+ (NSData *)encrypt:(NSData *)data Key:(id)key IV:(id)iv; | |
+ (NSData *)decrypt:(NSData *)data Key:(id)key IV:(id)iv; | |
+ (NSString *)encryptToBase64:(NSData *)data Key:(id)key IV:(id)iv; | |
+ (NSData *)decryptFromBase64:(NSString *)data Key:(id)key IV:(id)iv; | |
+ (NSData *)getKey:(NSString *)key; | |
+ (NSData *)getIV:(NSString *)iv; | |
+ (NSString*)convertHexStringFromData:(NSData*)data; | |
@end |
// | |
// FWEncryptorAES.m | |
// AES Encryptor | |
// | |
// Created by FrankWu on 2013/12/20. | |
// Copyright (c) 2013年 FrankWu. All rights reserved. | |
// | |
#import "FWEncryptorAES.h" | |
#import "NSData+CommonCrypto.h" | |
#import "NSData+Base64.h" | |
@implementation FWEncryptorAES | |
+ (NSData *)encrypt:(NSData *)data Key:(id)key IV:(id)iv | |
{ | |
NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]); | |
NSParameterAssert([iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]); | |
NSData *keyData = [self getKey:key]; | |
NSData *ivData = [self getIV:iv]; | |
CCCryptorStatus status = kCCSuccess; | |
NSData *encrypted = [data dataEncryptedUsingAlgorithm:kCCAlgorithmAES128 key:keyData initializationVector:ivData options:kCCOptionPKCS7Padding error:&status]; | |
return encrypted; | |
} | |
+ (NSData *)decrypt:(NSData *)data Key:(id)key IV:(id)iv | |
{ | |
NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]); | |
NSParameterAssert([iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]); | |
NSData *keyData = [self getKey:key]; | |
NSData *ivData = [self getIV:iv]; | |
CCCryptorStatus status = kCCSuccess; | |
NSData *decrypted = [data decryptedDataUsingAlgorithm:kCCAlgorithmAES128 key:keyData initializationVector:ivData options:kCCOptionPKCS7Padding error:&status]; | |
return decrypted; | |
} | |
+ (NSString *)encryptToBase64:(NSData *)data Key:(id)key IV:(id)iv | |
{ | |
NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]); | |
NSParameterAssert([iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]); | |
NSData *encrypted = [self encrypt:data Key:key IV:iv]; | |
return [encrypted base64EncodedString];\ | |
} | |
+ (NSData *)decryptFromBase64:(NSString *)str Key:(id)key IV:(id)iv | |
{ | |
NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]); | |
NSParameterAssert([iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]); | |
NSData *data = [NSData dataFromBase64String:str]; | |
NSData *decrypted = [self decrypt:data Key:key IV:iv]; | |
return decrypted; | |
} | |
+ (NSData *)getKey:(id)key | |
{ | |
NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]); | |
if ([key isKindOfClass: [NSString class]]) | |
return [[key dataUsingEncoding:NSUTF8StringEncoding] SHA256Hash]; | |
else | |
return (NSData *)key; | |
} | |
+ (NSData *)getIV:(id)iv | |
{ | |
NSParameterAssert([iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]); | |
if ([iv isKindOfClass: [NSString class]]) | |
return [[iv dataUsingEncoding:NSUTF8StringEncoding] MD5Sum]; | |
else | |
return (NSData *)iv; | |
} | |
+ (NSString*)convertHexStringFromData:(NSData*)data | |
{ | |
const unsigned char *result = [data bytes]; | |
NSMutableString *str = [NSMutableString stringWithCapacity:[data length]]; | |
for(int i = 0; i<[data length]; i++) | |
{ | |
[str appendFormat:@"%02x",result[i]]; | |
} | |
return str; | |
} | |
@end |
#import "NSData+CommonCrypto.h" file not found ..
#import "NSData+CommonCrypto.h" file not found ..
You can use #import <CommonCrypto/CommonCrypto.h>
#import "NSData+Base64.h" file not found
Hi all,
Please find all related files here: https://github.com/FrankWu100/FWEncryptorAES/tree/master/Objective-C/Src
Does this code works encrypts/decrypts only strings or also files?
Also support files, via NSData.
https://github.com/FrankWu100/FWEncryptorAES/blob/master/Objective-C/Src/FWEncryptorAES.m#L15-L41
Actually, NSString is based on NSData.
https://github.com/FrankWu100/FWEncryptorAES/blob/master/Objective-C/Src/FWEncryptorAES.m#L67
https://github.com/FrankWu100/FWEncryptorAES/blob/master/Objective-C/Src/FWEncryptorAES.m#L48
Thank you! Great job 👍
Concise, easy to understand. Good!