iOS Keychain《一》使用和封装

demo下载

1.keychain介绍

iOS keychain 是一个相对独立的空间,保存到keychain钥匙串中的信息不会因为卸载/重装app而丢失, 。相对于NSUserDefaults、plist文件保存等一般方式,keychain保存更为安全。所以我们会用keyChain保存一些私密信息,比如密码、证书、设备唯一码(把获取到用户设备的唯一ID 存到keychain 里面这样卸载或重装之后还可以获取到id,保证了一个设备一个ID)等等
keychain是用SQLite进行存储的。用苹果的话来说是一个专业的数据库,加密我们保存的数据,可以通过metadata(attributes)进行高效的搜索。keychain适合保存一些比较小的数据量的数据,如果要保存大的数据,可以考虑文件的形式存储在磁盘上,在keychain里面保存解密这个文件的密钥。

特点:

  • 更安全. 对比 NSUserDefault 存储一些数据, 会更加安全.
  • 即便 App 被卸载, 存储的信息依旧存在, 再次安装App, 存储是信息依旧可以使用.
  • 相同的 Team ID 开发, 可实现多个App 共享数据

2. Keychain 结构说明

Keychain 结构是由 key-value 组成.
多个 key-value 标签的作用 : 表明该钥匙的唯一性.
当我们对 Keychain 进行操作时, 就可以定义一个包含该 key-value 字典, 调用API, 对 Keychain 进行操作
在这里插入图片描述

2.1 Keychain 增 / 删 / 改 / 查

主要API

/** 添加 */
OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef * __nullable CF_RETURNS_RETAINED result);
/** 查询 */
OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_RETAINED result);
/** 更新 */
OSStatus SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate);
/** 删除 */
OSStatus SecItemDelete(CFDictionaryRef query);

3. Keychain App间共享数据

4.Keychain 的安全性

Keychain 并不是十分安全,在越狱的设备上,可以通过一些相应的工具很轻松的 dump 所有的 Keychain 数据,比如Keychain-Dumper,通过 ssh 登录设备,下载 keychain_dumper 至 /tmp 目录,然后 chmox +x keychain_dumper
赋予执行权限,直接 ./keychain_dumper > keychain_content.txt
,即可查看到相应的数据

Keychain 数据可以通过 iTunes 备份,iTunes 备份可以让用户选择是否加密备份,不加密的备份可以恢复到任何设备,而加密的备份不能恢复到其它设备。虽然 ThisDeviceOnly 类型的 Item 不会备份,但是 Item 则会备份

总而言之,考虑到 iCloud 服务器端、设备越狱等情况、甚至某些 Wi-FI 漏洞攻击,都有可能会泄露 Keychain 数据,最好是加密存储

5.案例KeyChain唯一标识符存储

项目需要存储用户的唯一标识符,但是由于如果用户重装APP,获取到的又会是一个新的UDID。查询了一系列资料下来,可以用Keychain进行存储UDID,然后就算重装了APP,也能从Keychain中读取出之前存储的UDID。
Keychain存储在iOS系统的内部数据库中,由系统进行管理和加密,哪怕APP被删除了,它存储在Keychain中的数据也不会被删除。

6.keychain的三种使用封装

请看下一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值