45

我正在KeychainItemWrapper设备上的应用程序内测试登录流程(使用)。如何重置/删除我的应用程序的钥匙串?

在模拟器上,我通过点击iOS Simulator -> Reset Content and Settings...来完成。

4

4 回答 4

14

钥匙串项目位于 iOS 沙箱中,用户无权删除不需要的钥匙串项目。这些只能通过 API 访问。

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIdentifier] accessGroup:nil]; 

//或者你如何访问你的钥匙串

[keychainItem resetKeychainItem];

或者您可以从设备设置、常规、重置、重置所有设置中重置您的设备>>。但是,它将重置设备上安装的每个应用程序的钥匙串。

于 2014-06-30T06:37:44.587 回答
1

您可以使用钥匙串转储器转储钥匙串数据。获取以下链接 https://github.com/ptoomey3/Keychain-Dumper

只需转到此网址并下载 zip 文件并解压缩即可。在这个文件夹中,我们唯一感兴趣的文件是 keychain_dumper 二进制文件。钥匙串中的应用程序允许访问的信息在其权利中指定。此二进制文件使用带有通配符权利的自签名证书进行签名,因此它能够访问所有钥匙串项目。还可能有其他方法来确保授予所有钥匙串信息,例如让权利文件包含所有钥匙串访问组或使用提供对所有钥匙串数据的访问的特定钥匙串访问组。例如,Keychain-viewer 工具使用以下权利。

com.apple.keystore.access-keychain-keys

com.apple.keystore.device

1) 只需将此二进制文件上传到您设备的 /tmp 文件夹中,并确保其可执行。

2) 现在确保存储在 /private/var/Keychains/keychain-2.db 位置的钥匙串数据库文件是世界可读的。

3)现在转到终端,您可以通过传递命令转储数据

.keychain_dumper

4)上面的命令将列出所有的用户名和密码。但上面只会转储通用密码和互联网密码。您可以使用“-h”命令查看使用信息。

5) 您可以使用“-a”命令转储所有信息。

您可以在此处阅读更多信息和示例 转储钥匙串数据

于 2015-07-12T17:58:08.040 回答
0
  • 这里下载keychainWrapper并将其添加到您的项目中。
  • 在要重置钥匙串的 viewController 中编写以下代码。

代码:

#import "KeychainItemWrapper.h"

@interface YourViewController ()
{
    KeychainItemWrapper *keychainItemWrapper;
}

- (void)viewDidLoad {

    [super viewDidLoad];

    keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"appname" accessGroup:nil];

}

- (IBAction)logoutButtonPressed:(id)sender {

    [keychainItemWrapper resetKeychainItem];

}
于 2015-05-22T07:58:37.853 回答
0

我需要为我的应用清除整个用户存储空间,所以使用了这个:

NSMutableDictionary *storage = [[NSMutableDictionary alloc] init];
[storage setObject:"myService" forKey:(__bridge id)kSecAttrService];
[storage setObject:["myAccount" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount];
// Possibly other attributes e.g.
[storage setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[storage setObject:["somethingCustom" dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrGeneric];
OSStatus status = SecItemDelete((CFDictionaryRef)storage);
// Handle status
// ...
于 2021-01-07T18:51:44.180 回答