0
如何成功從OS X中的鑰匙串中刪除項目?這是我迄今爲止,但它在SecItemDelete
呼叫失敗。我是否需要在查詢字典中指定一些其他屬性?通過執行類似的操作,我可以成功地將鍵值對插入鑰匙串中。如何成功從OS X中的鑰匙串中刪除項目?
#define DELETE_SIZE 3
bool delete_key_keychain(const char *cKeyValue, SecKeychainRef keychain) {
if (!keychain)
return false;
// Convert to CFString.
CFStringRef keyValue = CFStringCreateWithCString(NULL, cKeyValue, kCFStringEncodingUTF8);
if (!keyValue)
return false;
// Specify query parameters.
const void *keys[DELETE_SIZE] = {
kSecClass,
kSecUseKeychain,
kSecAttrAccount
};
const void *values[DELETE_SIZE] = {
kSecClassGenericPassword,
keychain,
keyValue
};
// Create query.
CFDictionaryRef query = CFDictionaryCreate(NULL, keys, values, GET_SIZE, NULL, NULL);
if (!query) {
CFRelease(keyValue);
return false;
}
// Run query.
OSStatus status = SecItemDelete(query);
CFRelease(query);
CFRelease(keyValue);
return status == errSecSuccess;
}
更新:根據這個link,我需要設置kSecAttrService
屬性查詢。結果,我開始使用SecKeychainFindGenericPassword
和SecKeychainItemDelete
。這將成功刪除密碼,但隨後爲同一個帳戶添加不同的密碼可能導致崩潰。因此,我開始使用SecKeychainItemModifyAttributesAndData
來修改密碼並且不要刪除密碼。我相信這種不穩定可能是由於API執行的緩存。
感謝您的回覆。原來問題是我沒有在我的查詢中設置'kSecAttrService'屬性。 –