iOS常用加密方法(aes、md5、base64)
来源:互联网 发布:个人网站域名名字 编辑:程序博客网 时间:2024/06/01 08:27
谢谢作者 旨在学习交流http://www.2cto.com/kf/201212/176351.html
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; //解密@endNSData+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.hGTMBase64.hGTMBase64.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.comNSString+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;@endNSString+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];}@enddemo含有这3种的使用方式,在AppDelegate.m文件里面,不会使用的自己参考一下
http://up.2cto.com/2012/1215/20121215123257741.zip
0 0
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS开发之常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- IOS开发之----常用加密方法(AES、MD5、Base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- IOS开发之----常用加密方法(AES、MD5、Base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- iOS常用加密方法(aes、md5、base64)
- c++primer第五版第十七章练习
- linux系统安装mysql
- LeetCode *** 328. Odd Even Linked List
- 常用直线图形生成算法(一)
- Java注解的部分实现:动态代理
- iOS常用加密方法(aes、md5、base64)
- Openstack Swift 原理、架构与 API 介绍
- Javascript闭包(Closure)
- 51nod 1272 最大距离 (单调栈)
- 双重指针的用法
- h264协议帧头数据解析
- Xamarin 免费了,你能做什么?
- BZOJ1787: [Ahoi2008]Meet 紧急集合(LCA)
- LeetCode *** 94. Binary Tree Inorder Traversal