Ios 重置设备上的钥匙链

Ios 重置设备上的钥匙链,ios,keychain,Ios,Keychain,我正在设备上测试应用程序内部的登录流(使用KeychainItemWrapper)。如何重置/删除应用程序的钥匙链 在模拟器上,我通过单击iOS模拟器->重置内容和设置来完成此操作。…钥匙链项目位于iOS沙盒中,用户无权删除不需要的钥匙链项目。这些仅可通过API访问 KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIde

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


在模拟器上,我通过单击iOS模拟器->重置内容和设置来完成此操作。…

钥匙链项目位于iOS沙盒中,用户无权删除不需要的钥匙链项目。这些仅可通过API访问

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:[[NSBundle mainBundle] bundleIdentifier] accessGroup:nil]; 
//或者你如何访问你的钥匙链

[keychainItem resetKeychainItem];
也可以从设备设置、常规、重置、重置所有设置中重置设备>>。 但是,它会为设备上安装的每个应用重置钥匙链。

  • 从下载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];

}

您可以使用钥匙链转储程序转储钥匙链数据。 抓取以下链接

只需转到此url,下载zip文件并解压缩即可。在这个文件夹中,我们感兴趣的唯一文件是keychain_dumper二进制文件。密钥链中的应用程序允许访问的信息在其权限中指定。此二进制文件使用具有通配符权限的自签名证书进行签名,因此它能够访问所有密钥链项。也可能有其他方法来确保所有钥匙链信息都被授予,比如让授权文件包含所有钥匙链访问组,或者使用提供对所有钥匙链数据访问的特定钥匙链访问组。例如,工具钥匙链查看器使用以下实体

com.apple.keystore.access-keychain-keys

com.apple.keystore.device

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

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

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

.钥匙链卸料器

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

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


您可以在这里阅读更多信息和示例

我需要清除我的应用程序的整个用户存储,因此使用以下方法:

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
// ...

可能重复@DanielMartín您链接到的问题是关于以编程方式重置钥匙链(我在我的应用程序中这样做)。我想知道如何手动进行测试。我知道的唯一方法是通过设备设置、常规、重置、重置所有设置来完成。它将重置设备上安装的每个应用程序的钥匙链。我对此投了赞成票,但意识到答案不正确。它没有删除我的应用程序的钥匙链,即使在卸载应用程序后,然后“重置所有设置”。@Jonny可能是iCloud钥匙链或其他什么?不确定如何在钥匙链中存储数据。我会在我的应用程序中创建一个“注销”方法来手动删除所有数据。重置所有设置不会重置钥匙链。WiFi密码已被删除,但存储在Keychain中的我的VPN密码和应用程序密码仍保留。您应该执行“擦除所有内容和设置”以清除Keychain。@Fahri,如何“擦除所有内容和设置”而不是“重置内容和设置”?警告:擦除所有内容和设置将擦除设备,包括应用程序和媒体!由于密钥链包装器的“here”链接不再有效,因此被否决。