保存值后,在KeychainItemWrapper中更改KSecAttrAccessible

时间:2013-07-14 14:51:30

标签: iphone ios keychain keychainitemwrapper

在我以前的应用程序版本(iPhone)中,我在以下代码的密钥链中保留了值(密码):

KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                     accessGroup:nil];

[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];

[keychain setObject: @ "MySuperSecretPassword" forKey:(id)kSecValueData];

[keychain release];

并获取以下代码中的值:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                    accessGroup:nil];

[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];

NSString *key = [keychain objectForKey:(id)kSecValueData];

因为有时我的应用程序在后台运行,我发现了一个错误,我无法从Keychain中获取我的价值。

我通过将kSecAttrAccessible的值从kSecAttrAccessibleWhenUnlocked更改为kSecAttrAccessibleAlways来修复错误。

KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                 accessGroup:nil];
[keychain setObject:kSecAttrAccessibleAlways forKey:kSecAttrAccessible];

[keychain setObject: @"MySuperSecretPassword" forKey: kSecValueData];
 
[keychain release];

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest" 
                                                                    accessGroup:nil];

    [keychain setObject: kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];

    NSString *key = [keychain objectForKey:(id)kSecValueData];

我的问题是:如果此更改也会对用户有所帮助,可以保存以前版本中的值。

我的bug很难恢复,所以我问这个问题。 现在,在这次改变之后,我无法恢复这个漏洞。

由于

0 个答案:

没有答案