首页 文章

iOS Keychain偶尔会返回空字符串

提问于
浏览
5

我写了非常安全的应用程序(对于Bank),我将私钥保存在Keychain中 . 我使用以下代码保留私钥:

+(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;
}

我不会出于安全原因将私钥保存在本地变量中 . 因为每次调用服务器我需要多次调用的私钥来运行“GetPrivateKey” . 也许这就是为什么有时我会从钥匙串中取出空字符串 . 我想不出为什么会这样 . 我注意到在大多数情况下,当应用程序从后台返回时会发生这种情况,但不仅仅是......谢谢......

我向Apple工程师开了门票,他们回复了我:

您最初创建钥匙串项时是否设置了kSecAttrAccessible属性?

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

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

2 回答

  • 1

    我不久就回答了这个问题 . 我不确定这是否是您的确切问题,因为您的代码看起来/工作正常 . 所以关于你的钥匙串访问,我猜它有点不同 . 这可能会有所帮助,也可能没有帮助,但可能会引导您朝着正确的方向前进 .

    iOS KeyChain not retrieving values from background

  • 0

    如果您的 class 正在使用ARC,则以下每次都适用于我 .

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

相关问题