5

我编写了非常安全的应用程序(用于银行),并将私钥保存在钥匙串中。我使用以下代码保留私钥:

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

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

4

2 回答 2

1

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

iOS KeyChain 未从后台检索值

于 2013-06-27T15:48:41.500 回答
0

如果您的班级使用 ARC,则以下内容每次都对我有用。

KeychainItemWrapper *testKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AppUniqueID" accessGroup:nil];
NSString *privateKey = [testKeychain objectForKey:(__bridge id)(kSecValueData)];

NSLog(@"Private Key: %@ \n", privateKey);
于 2013-06-27T15:15:23.077 回答