-
iOS常用加密方法(aes、md5、base64)
-
-
1、AES加密
-
NSData+AES.h文件
-
-
//
-
// NSData-AES.h
-
// Smile
-
//
-
// Created by 周 敏 on 12-11-24.
-
// Copyright (c) 2012年 BOX. All rights reserved.
-
//
-
-
#import <Foundation/Foundation.h>
-
-
@class NSString;
-
-
@interface NSData (Encryption)
-
-
- (NSData *)AES256EncryptWithKey:(NSString *)key; //加密
-
- (NSData *)AES256DecryptWithKey:(NSString *)key; //解密
-
-
@end
-
-
NSData+AES.m文件
-
-
//
-
// NSData-AES.h
-
// Smile
-
//
-
// Created by 周 敏 on 12-11-24.
-
// Copyright (c) 2012年 BOX. All rights reserved.
-
//
-
-
#import "NSData+AES.h"
-
#import <CommonCrypto/CommonCryptor.h>
-
-
@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
-
你可以在這裏找到這三個文件
-
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加密 www.2cto.com
-
NSString+MD5.h文件
-
-
//
-
// NSString+MD5Encrypt.h
-
// Smile
-
//
-
// Created by 周 敏 on 12-11-24.
-
// Copyright (c) 2012年 BOX. All rights reserved.
-
//
-
-
#import <CommonCrypto/CommonDigest.h>
-
-
@interface NSString (MD5)
-
-
- (NSString *)md5Encrypt;
-
-
@end
-
-
-
NSString+MD5.m文件
-
-
//
-
// NSString+MD5Encrypt.h
-
// Smile
-
//
-
// Created by 周 敏 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:@"%02X", result[i]];
-
return [hash lowercaseString];
-
}
-
-
-
@end
|