KeyChain:
文档上说iOS的KeyChain是一个相对独立的空间,当程序替换,删除时并不会删除keyChain的内容,这个要比Library/Cache好。刷机,恢复出厂应该就没有了。关于备份,只会备份数据,到那时不会备份设备的密钥,换句话说,即使拿到数据,也没有办法解密里面的内容。有人说似乎破解的手机就能破解keyChain,本人并不清楚,希望有大神能指教。但个人认为,keyChain只是沙盒的升级版,可以存放一些非私密的信息,即使破解也不影响其它用户,只影响那个破解了的设备。(比如针对该设备的一个密钥)。
可访问性一般来说,自己的程序只能访问自己的keychain,相同bundle的程序通过设置group可以互相共享同组的keychain,从而实现程序间可以共同访问一些数据
下面笔者就一步一步带着大家使用KeyChain:
一、新建一个App Project (DBKeyChainDemo)
此步骤就不多说,略~
二、给予DBKeyChainDemo使用KeyChain的权限
1、打开KeyChain功能
2、KeyChain绑定证书
选择你需要打包使用的证书。
如果此处没有你需要选择的证书,就可以在View Accounts中编辑,在选择对应证书
3、完成上面两部后会出现下图效果
标注1:带有证书的KeyChain许可,不可删除(本文下部分有介绍)
标注2:ACCESS_GROUP(本文下部分有介绍)
三、使用KeyChain的准备
笔者使用第三方类:SSKeychain,并且在其基础上进行了一层实用性封装,可点击此处下载SSKeychain和全文使用的Demo:DBKeyChainDemo.zip
解压SSKeyChain.zip并将SSKeyChain文件夹加入工程
因为我们用的是KeyChain,所以需要增加系统的安全框架:Security.framework
四、KeyChain的增删改查
准确的说KeyChain中只有增删查,改的部分与增加类似。
想实现对KeyChain的操作,必须理解两个概念:
1、KeyChain是和证书绑定对应的。一个KeyChain只能允许一个证书发布的应用访问,即可在一定程度上实现多应用数据共享。
2、ACCESS_GROUP:KeyChain好比是一栋房子,这栋房子归它绑定的证书管理,但是这栋房子里会有很多房间,每个房间都需要一个钥匙,而ACCESS_GROUP就相当于这个钥匙,每个应用必须持有指定的钥匙才能去特定的房间存放或者拿走东西。而这个钥匙也是和证书相关的,在申请证书的时候可以看到苹果生成的一串随机串号。比如串号是:N7KB6CDK8X,则你的ACCESS_GROUP格式就必须为N7KB6CDK8X打头的字符串。例如:N7KB6CDK8X.dengbin、N7KB6CDK8X.com.Tencent.dengbin。使用ACCESS_GROUP之前必须先对App申明这个ACCESS_GROUP(一个App可是属于有多个ACCESS_GROUP)。申明是不需要带上账号的随机串号N7KB6CDK8X。
或者在entitlements文件中申明,在此处申明的时候是需要加上串号的:
了解了这两个概念后就是对KeyChain操作了:
打开刚才下载的SSKeyChain文件夹下面的DBKeyChainStoreServer.m文件
修改#define ACCESS_GROUP @"N7KB6CDK8X.com.Tencent.dengbin"(N7KB6CDK8X为串号,若需要正常使用KeyChain,需要更换真实的串号,必须在App中已申明)
笔者使用的SSKeyChain有一个很好的功能:利用账号和储存类型存取数据。
由于是Demo的关系就不过多介绍此功能,Demo中将账号和储存类型写死,若有兴趣可自行了解或者回复留言。
/* KeyChain的安全验证账号 */
#define KeyChainAccount @"com.dengbin.KeyChainAccount"
/* KeyChain的存储类型*/
#define KeyChainService @"com.dengbin.KeyChainService"
该修改的都已经修改好,运行Demo看看效果!
ok!如果读者有什么不明白的地方希望留言,若有描述含糊不清的地方也请亲喷,拜谢!
可点击此处下载SSKeychain和全文使用的Demo:DBKeyChainDemo.zip
转载请注明出处:http://blog.csdn.net/dengbin9009/article/details/41314057