UI进阶——数据的加解密
2016-03-16 15:48
417 查看
一、MD5加解密
demo如下:#import "ViewController.h" #import <CommonCrypto/CommonCrypto.h> #import "Person.h"
-(void)md5{ NSString *str = @"I love sky and sunshine."; const char *sourceData = [str UTF8String]; // unsigned char resut[CC_MD5_DIGEST_LENGTH]; unsigned char result[CC_MD5_DIGEST_LENGTH]; /** * 加密长度 * * @param data#> 数据源 description#> * @param len#> 数据源的长度 description#> * @param md#> 计算完成后的结果容器 description#> * * @return */ CC_MD5(sourceData,(CC_LONG)strlen(sourceData),result); NSMutableString *md5_str = [NSMutableString string]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) { [md5_str appendFormat:@"%02X",result[i]]; } NSLog(@"简单字符串加密完成--%@",md5_str); } -(void)md5_array{ NSArray *sourceArray = @[@"a",@"b",@"c"]; NSData *data = [NSJSONSerialization dataWithJSONObject:sourceArray options:NSJSONWritingPrettyPrinted error:nil]; NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; const char *sourceData = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; /** * 加密长度 * * @param data#> 数据源 description#> * @param len#> 数据源的长度 description#> * @param md#> 计算完成后的结果容器 description#> * * @return */ CC_MD5(sourceData,(CC_LONG)strlen(sourceData),result); NSMutableString *md5_str = [NSMutableString string]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) { [md5_str appendFormat:@"%02X",result[i]]; } NSLog(@"数组加密完成--%@",md5_str); } //复杂对象的加密 -(void)archiverPersonWithMD5{ Person* person = [[Person alloc]init]; person.name = @"我是个人"; NSMutableData* data = [NSMutableData data]; NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; [archiver encodeObject:person forKey:@"person"]; //归档结束 [archiver finishEncoding]; //加密 NSString* str = [Secrets md5WithData:data]; NSLog(@"方法加密完成--%@",str); // NSString* str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; // const char *sourceChar = [str UTF8String]; const void *source = data.bytes; unsigned char result[CC_MD5_DIGEST_LENGTH]; // CC_MD5(sourceChar, (CC_LONG)strlen(sourceChar), result); CC_MD5(source, (CC_LONG)strlen(source), result); NSMutableString *md5_str = [NSMutableString string]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i ++) { [md5_str appendFormat:@"%02X",result[i]]; } NSLog(@"复杂对象加密完成--%@",md5_str); //5FEC80182F9215931C415F75299414C8 }
在这里用了复杂对象的归档,在复杂对象加解密的时候,在归档结束后,使用归档结果的data数据加密,并不用转化为字符串,前面的两种方式也是可以用data数据加密。
二、钥匙串加密
demo如下:在加密前需要导入一个类
#import "KeychainItemWrapper.h"
//钥匙串加密 -(void)keyChain{ //创建一个钥匙串对象 //identifer 对当前所使用的钥匙串添加一个标记。解密的时候,需要根据此标记获得对应的钥匙串。 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"myIdentifer" accessGroup:nil]; //当我们血药存储钥匙串对象时,需要使用系统的键,而不能使用自定义的键。 id stringKey = (__bridge id)kSecAttrAccount; //存储一下 [wrapper setObject:@"我是warpper" forKey:stringKey]; } //钥匙串解密 -(void)decipheringKeychain{ //先得到钥匙串对象 KeychainItemWrapper* wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"myIdentifer" accessGroup:nil]; //得到键值 id stringKey = (__bridge id)kSecAttrAccount; NSString* str = [wrapper objectForKey:stringKey]; NSLog(@"%@",str); }
非对称加密,只适合对小型数据加密。
base64加密方式
demo如下:
//base64加密 - (NSString* )encodeBase64:(NSString*)str{ //对数据进行转化 NSData *sourceData = [str dataUsingEncoding:NSUTF8StringEncoding]; //base64加密时,会出现反斜杠或加号等等,不适合给网址加密,给网址加密时,要用到自己的加密方法 NSString *result = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"base64---%@",result); return result; } //base64解密 - (void)decipherBase64WithString:(NSString*)string{ //解码,第二个参数的意义为设置其解码。 NSData* data = [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSString* stringR = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"string==%@",stringR); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // [self md5]; // [self md5_array]; // [self archiverPersonWithMD5]; // [self keyChain]; // [self decipheringKeychain]; NSString* str = @"被加密的数据"; [self decipherBase64WithString:[self encodeBase64:str]]; }
相关文章推荐
- Android源码中关机充电UI的修改
- 31. UITableView的编辑模式
- iOS自定义弹出框(UIAleartView)
- [UE4]逻辑状态机组件
- Incorrect string value: '\xF0\x9F\x98\x8A. ...' for column
- Rule in UESTC
- 常见MFC UI界面库
- Map集合中value()方法与keySet()、entrySet()区别
- UIImageView 的contentMode属性
- Android:SystemUi有关notification
- 随机数生成 arc4random_uniform(_:UInt32) ->UInt32
- 堵塞队列--BlockingQueue
- Ngui 左右滑动
- 解决的方法:warning: Clock skew detected. Your build may be incomplete.
- Xcode中的Version和Build的区别
- 导航栏颜色及UIBarButtonItem 的设置
- iOS This certificate has an invalid issuer
- 给UI控件画边框
- 从keyPressEvent按键事件中获取QKeySequence
- iOS开发中使用UIScrollView实现无限循环的图片浏览器