更新鑰匙串中的密碼
像往常一樣,我們首先需要一個 CFDictionary
來表示我們想要更新的專案。這必須包含專案的所有舊值,包括舊的私有資料。然後,你需要更改任何屬性或資料本身的 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
現在我們必須新增舊資料:
迅速
dict[kSecValueData as String] = "my_password!!".data(using: .utf8) as! CFData
現在讓我們建立相同的屬性,但不同的密碼:
迅速
var newDict = [String : AnyObject]()
newDict[kSecClass as String] = kSecClassGenericPassword
// Label
newDict[kSecAttrLabel as String] = "com.me.myapp.myaccountpassword" as CFString
// Username
newDict[kSecAttrAccount as String] = "My Name" as CFString
// New password
newDict[kSecValueData as String] = "new_password!!".data(using: .utf8) as! CFData
現在,我們將其傳遞給 Keychain Services:
迅速
let status = SecItemUpdate(dict as CFDictionary, newDict as CFDictionary)
SecItemUpdate
返回狀態程式碼。結果在這裡描述。