1、代码

iOS常用加密方法(aes、md5、base64)

、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+];
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 = ;
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+];
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 = ;
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位编码。 、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;
} 、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 = ; i < ; i++)
[hash appendFormat:@"%02X", result[i]];
return [hash lowercaseString];
} @end

2、调用方法:

#import "SecurityUtil.h"

NSString *testString = @"test";

方法1:(不可逆转)

NSLog(@"======BASE64:%@======", [SecurityUtil encodeBase64String:testString]);

方法2:(不可逆转)

NSLog(@"======MD5:%@=======", [SecurityUtil encryptMD5String:testString]);

方法3:(可逆转)

NSData *aesData = [SecurityUtil encryptAESData:testString];

NSLog(@"=====AES加密:%@=========", aesData);

NSLog(@"=======AES解密:%@======", [SecurityUtil decryptAESData:aesData]);

方法4:组合方法

比如将MD5结果值进行BASE64加密等等,从而加大破解难度

demo含有这3种的使用方式,在AppDelegate.m文件里面,不会使用的自己参考一下

http://up.2cto.com/2012/1215/20121215123257741.zip

ps:http://www.2cto.com/kf/201212/176351.html

最新文章

  1. Java泛型学习笔记 - (三)泛型方法
  2. DotNetBar中collapsibleSplitContainer的问题
  3. Java命令行的执行参数
  4. JavaWeb学习记录(十三)——商城购物之添加订单的数据库级联操作
  5. css background-position:x% y%
  6. JQuery Ajax 获取数据
  7. VitualBox中linux系统ping ip能通域名不通的解决办法
  8. NRF24L01无线通讯模块驱动
  9. java程序测试之字符流
  10. Centos7 编译安装 Nginx PHP Mariadb Memcache扩展 ZendOpcache扩展 (实测 笔记 Centos 7.0 + Mariadb 10.1.9 + Nginx 1.9.9 + PHP 5.5.30)
  11. Git使用之(pathspec master did not match any file(s) known to git)
  12. 目标检测--SSD: Single Shot MultiBox Detector(2015)
  13. 高性能JavaScript之DOM编程
  14. cocos2dx 粒子系统
  15. PHP设计模式之观察者模式(转)
  16. java 缺憾:异常的丢失
  17. 尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)
  18. 基于Verilog的偶数、奇数、半整数分频以及任意分频器设计
  19. ASP.NET 构建高性能网站 第3篇
  20. Java class 中public、protected 、friendly、private的区别

热门文章

  1. 【习题 6-9 UVA - 127】&quot;Accordian&quot; Patience
  2. 【习题 6-7 UVA - 804】Petri Net Simulation
  3. cocos2d-x 3.0 游戏关卡滑动 弹动 不会出现黑边效果
  4. 如何把别人的原理图和pcb图建立一个完整的工程
  5. WSDL文档框架
  6. 讨论:怎样加快android的开机时间
  7. swift开发多线程篇 - NSThread 线程相关简单说明(一些使用和注意点)
  8. Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警
  9. 5、regulator系统的概念及测试
  10. Codeforces Round #315 (Div. 2) (ABCD题解)