iOS Keychain偶尔会返回空string

我写非常安全的应用程序(银行),我把私钥钥匙链。 我使用下面的代码保持私钥:

+(void)savePrivatekey:(NSString *)Key { KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey" accessGroup:nil]; [keychain setObject:Key forKey:(id)kSecValueData]; [keychain release]; } 

并使用以下代码获取私钥:

 +(NSString *)privateKey { KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey"accessGroup:nil]; NSString *privateKey = [keychain objectForKey:(id)kSecValueData]; [keychain release]; return privateKey; } 

出于安全原因,我不把私钥保存在局部variables中。 因为每次调用服务器都需要我调用很多次的“GetPrivateKey”的私钥。 也许这就是为什么有时我从钥匙串空string中获得。 我想不出为什么会发生这种情况。 我注意到,在大多数情况下,这发生在应用程序从后台返回,但不仅…谢谢…

我给苹果的工程师开了票,他们回答我:

当您最初创build钥匙串项目时,您是否设置了kSecAttrAccessible属性?

我总是创build相同的形状钥匙串:KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@“pKey”accessGroup:nil];

有谁知道他们的意图是什么? 谢谢…

我回答了我自己的问题。 我不确定这是否是你确切的问题,因为你的代码似乎看起来/工作正常。 所以关于你的钥匙链访问,我猜这是有点不同。 这可能会也可能不会帮助,但可能会导致你在正确的方向。

iOS KeyChain不从后台检索值

如果你的课程使用ARC,下面的内容适用于我。

 KeychainItemWrapper *testKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AppUniqueID" accessGroup:nil]; NSString *privateKey = [testKeychain objectForKey:(__bridge id)(kSecValueData)]; NSLog(@"Private Key: %@ \n", privateKey);