iOS Keychain Services

方法

SecItemCopyMatching

描述:返回一个或多个匹配查询搜索的 keychain 项目,或者拷贝指定 keychain 项目的属性。

声明:OSStatus SecItemCopyMatching ( CFDictionaryRef query, CFTypeRef *result );

此函数有两个参数:

  • query,包含一个项目类别的描述(Keychain Item Class and Values)和查找可选属性的字典。详见 Keychain Services Constants 对于当前定义的搜索属性的描述。

  • result, 已找到项目的一个引用。result 确切的类型取决于查询时搜索属性的类型,下面会有具体讨论。

讨论

通过给查询字典添加键值对来指定一个搜索属性。

典型的查询包含有:

指定的返回类型(Search Results Constants)如下:

  • kCFBooleanTrue 的值来指定 kSecReturnData 去得到对应项目数据的引用(CFDataRef 类型)。

  • kCFBooleanTrue 的值指定 kSecReturnAttributes 来获得包含对应项目的属性的字典(CFDictionaryRef 类型)。

  • kCFBooleanTrue 的值指定 kSecReturnRef 来获得对应项目的引用(SecKeychainItemRefSecKeyRefSecCertificateRefSecIdentityRef 类型)。

  • kCFBooleanTrue 的值指定 kSecReturnPersistentRef 来获得对应项目的持久引用(CFDataRef 类型)。注意这和常规的引用不同,持久引用可能会存储到磁盘中或在处理过程中被传递。

如果一个或多个返回类型被指定了(例如 kSecReturnRefkSecReturnAttributes),返回的结果是一个包含所有请求数据的字典(CFDictionaryRef 类型的字典)。
默认的,这个函数只会返回第一次匹配到的。为了在同一时间得到更多的匹配项,要用大于 1 的值来指定搜索键 kSecMatchLimit。随后这个返回结果将会是包含许多匹配项的 CFArrayRef 类型对象。