重置设备上的钥匙串

时间:2013-05-02 11:05:30

标签: ios keychain

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

在模拟器上,我是通过点击 iOS模拟器 - >来完成的。 重置内容和设置...

4 个答案:

答案 0 :(得分:11)

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

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

//或您如何访问钥匙串

[keychainItem resetKeychainItem];

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

答案 1 :(得分:1)

  • here下载 keychainWrapper 并将其添加到您的项目中。
  • 在您想要的viewController中编写以下代码 重置钥匙串。

<强> CODE:

#import "KeychainItemWrapper.h"

@interface YourViewController ()
{
    KeychainItemWrapper *keychainItemWrapper;
}

- (void)viewDidLoad {

    [super viewDidLoad];

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

}

- (IBAction)logoutButtonPressed:(id)sender {

    [keychainItemWrapper resetKeychainItem];

}

答案 2 :(得分:1)

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

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

com.apple.keystore.access-钥匙链键

com.apple.keystore.device

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

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

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

来转储数据

.keychain_dumper

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

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

您可以在此处阅读更多信息和示例dumping keychain data

答案 3 :(得分: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
// ...