网络之数据安全(2):钥匙串加密

什么是钥匙串?

钥匙串:(Keychain)是苹果公司Mac OS中的密码管理系统。它在Mac OS 8.6中和iOS7之后被导入,并且包括在了所有后续的各版本中。一个钥匙串可以包含多种类型的数据:密码(包括网站,FTP服务器,SSH账户,网络共享,无线网络,群组软件,加密磁盘镜像等),私钥,电子证书和加密笔记等。

钥匙串加密

  • 苹果iOS和Mac OS X系统自带了一套敏感信息保存方案:“钥匙串(Keychain)”
  • 保存在钥匙串的内容相当于系统对其做了保护,在设备锁定时进行了加密处理
  • 钥匙串中的条目称为SecItem,但它是存储在CFDictionary中的。SecItemRef类型并不存在。SecItem有五类:通用密码、互联网密码、证书、密钥和身份。在大多数情况下,我们用到的都是通用密码
  • 钥匙串的使用和字典非常的相似
  • 用原生的Security.framework就可以实现钥匙串的访问、读写,但是只能在真机上进行。通常我们使用KeychainItemWrapper来完成钥匙串的加密。

钥匙串的使用

  • 拷贝钥匙串类到工程中
  • 引入标准头文件
  • 生成钥匙串对象
  • 存储加密的数据
  • 获得钥匙串对象
  • 获取加密的数据
    ------------------ViewController.m------------------
#import "ViewController.h"

#import "KeychainItemWrapper.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 开始的时候先把钥匙串类拷贝到工程中,也就是KeychainItemWrapper.h和KeychainItemWrapper.m文件,然后引入.m头文件
    // 另外引入的头文件是MRC模式的,需要修改BuildPhases中的值
    
    // 1. 创建一个钥匙串对象
    // 参数1 : 表示这个钥匙串对象的标识符
    // 参数2 : 分组 一般为nil
    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyItemWrapper" accessGroup:nil];
    
    // 钥匙串是类似于字典存储的, 在存储的时候 必须使用系统提供的两个key值, 其他的存不进去
    id kUserName = (__bridge id)kSecAttrAccount;
    id kPassWord = (__bridge id)kSecValueData;
    
    // 存入到钥匙串里面
    [wrapper setObject:@"123" forKey:kUserName];
    [wrapper setObject:@"abc" forKey:kPassWord];

#pragma mark ---- 获取钥匙串的数据
    
    KeychainItemWrapper *newWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyItemWrapper" accessGroup:nil];
    // 取值
    NSString *userName = [newWrapper objectForKey:kUserName];
    NSString *passWord = [newWrapper objectForKey:kPassWord];
    NSLog(@"userName ===== %@, passWord ==== %@", userName, passWord);
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end
网络之数据安全(2):钥匙串加密_第1张图片
ARC设置修改及工程截图.png

你可能感兴趣的:(网络之数据安全(2):钥匙串加密)