1、AES加密
NSData+AES.h文件
-
//
-
//
NSData-AES.h -
//
Smile -
//
-
//
Created by Gary on 12-11-24. -
//
Copyright (c) 2012年 BOX. All rights reserved. -
//
-
-
#import
-
-
@class
NSString; -
-
@interface
NSData (Encryption) -
-
-
(NSData *)AES256EncryptWithKey:(NSString *)key; //加密 -
-
(NSData *)AES256DecryptWithKey:(NSString *)key; //解密 -
-
@end
NSData+AES.m文件
-
//
-
//
NSData-AES.h -
//
Smile -
//
-
//
Created by Gary on 12-11-24. -
//
Copyright (c) 2012年 BOX. All rights reserved. -
//
-
-
#import
"NSData+AES.h" -
#import
-
-
@implementation
NSData (Encryption) -
-
-
(NSData *)AES256EncryptWithKey:(NSString *)key {//加密 -
char keyPtr[kCCKeySizeAES256+1]; -
bzero(keyPtr, sizeof(keyPtr)); -
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; -
NSUInteger dataLength = [self length]; -
size_t bufferSize = dataLength + kCCBlockSizeAES128; -
void *buffer = malloc(bufferSize); -
size_t numBytesEncrypted = 0; -
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, -
kCCOptionPKCS7Padding | kCCOptionECBMode, -
keyPtr, kCCBlockSizeAES128, -
NULL, -
[self bytes], dataLength, -
buffer, bufferSize, -
&numBytesEncrypted); -
if (cryptStatus == kCCSuccess) { -
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; -
} -
free(buffer); -
return nil; -
}
-
-
-
-
(NSData *)AES256DecryptWithKey:(NSString *)key {//解密 -
char keyPtr[kCCKeySizeAES256+1]; -
bzero(keyPtr, sizeof(keyPtr)); -
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; -
NSUInteger dataLength = [self length]; -
size_t bufferSize = dataLength + kCCBlockSizeAES128; -
void *buffer = malloc(bufferSize); -
size_t numBytesDecrypted = 0; -
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, -
kCCOptionPKCS7Padding | kCCOptionECBMode, -
keyPtr, kCCBlockSizeAES128, -
NULL, -
[self bytes], dataLength, -
buffer, bufferSize, -
&numBytesDecrypted); -
if (cryptStatus == kCCSuccess) { -
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; -
} -
free(buffer); -
return nil; -
}
-
-
@end
这里AES在iOS加过密以后以nsdata的形式存下来,如果想以nsstring形式存储,那么对nsdata进行base64位编码。
2、BASE64编码
首先下载GTMBase64文件,在工程中加入三个文件
GTMDefines.h
GTMBase64.h
GTMBase64.m
你可以在这里找到这三个文件
GTMDefines.h
GTMBase64.h
GTMBase64.m
你可以在这里找到这三个文件
http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/?r=87
你也可以在下面的demo里面找到这3个文件,demo会完整实现文章里面常用的3种编码方法。
我在此稍微封装一下:
.h文件
-
#pragma
mark - base64 -
+
(NSString*)encodeBase64String:(NSString *)input; -
+
(NSString*)decodeBase64String:(NSString *)input; -
+
(NSString*)encodeBase64Data:(NSData *)data; -
+
(NSString*)decodeBase64Data:(NSData *)data;
.m文件
-
#pragma
mark - base64 -
+
(NSString*)encodeBase64String:(NSString * )input { -
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; -
data = [GTMBase64 encodeData:data]; -
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; -
return base64String; -
}
-
-
+
(NSString*)decodeBase64String:(NSString * )input { -
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; -
data = [GTMBase64 decodeData:data]; -
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; -
return base64String; -
}
-
-
+
(NSString*)encodeBase64Data:(NSData *)data { -
data = [GTMBase64 encodeData:data]; -
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; -
return base64String; -
}
-
-
+
(NSString*)decodeBase64Data:(NSData *)data { -
data = [GTMBase64 decodeData:data]; -
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; -
return base64String; -
}
3、MD5加密
NSString+MD5.h文件
-
//
-
//
NSString+MD5Encrypt.h -
//
Smile -
//
-
//
Created by Gary on 12-11-24. -
//
Copyright (c) 2012年 BOX. All rights reserved. -
//
-
-
#import
-
-
@interface
NSString (MD5) -
-
-
(NSString *)md5Encrypt; -
-
@end
NSString+MD5.m文件
-
//
-
//
NSString+MD5Encrypt.h -
//
Smile -
//
-
//
Created by Gary on 12-11-24. -
//
Copyright (c) 2012年 BOX. All rights reserved. -
//
-
-
#import
"NSString+MD5.h" -
-
@implementation
NSString (MD5) -
-
-
(NSString *)md5Encrypt { -
const char *original_str = [self UTF8String]; -
unsigned char result[CC_MD5_DIGEST_LENGTH]; -
CC_MD5(original_str, strlen(original_str), result); -
NSMutableString *hash = [NSMutableString string]; -
for (int i = 0; i < 16; i++) -
[hash appendFormat:@"X", result[i]]; -
return [hash lowercaseString]; -
}
-
-
@end
demo含有这3种的使用方式,在AppDelegate.m文件里面,不会使用的自己参考一下。