阐述
数据安全性对于各阶段的程序猿来说都是很重要的,最近因产品需要提升安全性,研究了一下Keychain并记录之。
探讨
- Keychain Services是什么?
Keychain Services是苹果提供的,可对数据进行加密的服务。该服务可以保证将应用从设备删除后,存储在Keychain中的数据依旧存在;另外针对同一Share Group中的应用可以共享Keychain中的数据。
Keychain Services包含在框架 Security.framework中,使用时需要先添加该框架,并引入头文件 <Security/Security.h>。
- 应用场景?
Keychain可用于保护少量的数据,如密码、密钥、证书和备忘录,但是如果目标对象为音频、视频、图像等文件,考虑用第三方加密库进行加密。
- 怎么用?
苹果在框架中提供了High Level及Lower Level两种级别的封装,不过High Level只能在macOS中使用,故不再讨论它。Lower Level与High Level相比,更加贴近底层,故它的功能比High Level更加强大。
下面先跟四个兄弟打个招呼,也就是我们常说的“增删改查”。
OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef * __nullable CF_RETURNS_RETAINED result)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0);
OSStatus SecItemDelete(CFDictionaryRef query)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0);
OSStatus SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0);
OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_RETAINED result)
__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0);
SecItemAdd 用来创建新的钥匙对象SecItemDelete 用来移除某个钥匙对象
SecItemUpdate 用来修改指定钥匙对象
SecItemCopyMatching 用来取回指定钥匙所隐藏的信息
我们发现这四个函数的第一个参数均是CFDictionaryRef类对象,我们可以使用字典保存,使用时进行CFDictionaryRef强转,下方我们用钥匙串项来称呼它。