在鑰匙串中查詢密碼
要構造查詢,我們需要將其表示為 CFDictionary
。你也可以在 Objective-C 中使用 NSDictionary
或在 Swift 中使用 Dictionary
並使用 CFDictionary
。
我們需要一個類金鑰:
迅速
var dict = [String : AnyObject]()
dict[kSecClass as String] = kSecClassGenericPassword
接下來,我們可以指定屬性來縮小搜尋範圍:
迅速
// Label
dict[kSecAttrLabel as String] = "com.me.myapp.myaccountpassword" as CFString
// Username
dict[kSecAttrAccount as String] = "My Name" as CFString
// Service name
dict[kSecAttrService as String] = "MyService" as CFString
我們還可以指定此處描述的特殊搜尋修飾鍵。
最後,我們需要說明我們的資料是如何返回的。下面,我們將要求只將私有密碼作為 CFData
物件返回:
迅速
dict[kSecReturnData as String] = kCFBooleanTrue
現在,讓我們搜尋:
迅速
var queryResult: AnyObject?
let status = withUnsafeMutablePointer(to: &queryResult) {
SecItemCopyMatching(dict as CFDictionary, UnsafeMutablePointer($0))
}
// Don't keep this in memory for long!!
let password = String(data: queryResult as! Data, encoding: .utf8)!
在這裡,SecItemCopyMatching
接收一個查詢字典和一個指向你想要結果的位置的指標。它返回帶有結果程式碼的 OSStatus
。這是可能性。