更新鑰匙串中的密碼

像往常一樣,我們首先需要一個 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 返回狀態程式碼。結果在這裡描述。