-
-
Save baiyunping333/9f6c91af1c2d7e88ec951eb828e302ad 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment