Last active
March 6, 2023 14:41
-
-
Save FrankWu100/8048697 to your computer and use it in GitHub Desktop.
AES Encryption/Decryption on Objective-C
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 characters
// | |
// 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 |
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 characters
// | |
// 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 |
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 👍
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#import "NSData+Base64.h" file not found