我需要删除存储在钥匙串中的所有钥匙。问题是它们不是静态字符串(我使用“用户名+静态字符串”创建它们),并且必须实现类似reset app选项的操作。

在应用程序实现的时候(几年前),我使用了一个名为FXKeychain的库来访问钥匙串,但是似乎没有这样的选择。

还有其他方法吗?

我正在使用Objective-C。

我发现此代码正在搜索:

NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                              (__bridge id)kCFBooleanTrue, (__bridge id)kSecReturnAttributes,
                              (__bridge id)kSecMatchLimitAll, (__bridge id)kSecMatchLimit,
                              nil];
NSArray *secItemClasses = [NSArray arrayWithObjects:
                           (__bridge id)kSecClassGenericPassword,
                           (__bridge id)kSecClassInternetPassword,
                           (__bridge id)kSecClassCertificate,
                           (__bridge id)kSecClassKey,
                           (__bridge id)kSecClassIdentity,
                           nil];

for (id secItemClass in secItemClasses) {
    [query setObject:secItemClass forKey:(__bridge id)kSecClass];

    CFTypeRef result = NULL;
    SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);
    NSLog(@"%@", (__bridge id)result);
    if (result != NULL) CFRelease(result);
}


但是我不完全理解它,我认为它不起作用(也许必须与我使用的库一起使用?)

最佳答案

要删除从您的应用中添加的钥匙串项目,这应该可以正常工作:
KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIdentifier] accessGroup:nil];

[keychain resetKeychainItem];

你已经尝试过了吗?

10-08 06:06