我写了非常安全的应用程序(对于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];
有谁知道他们的意图是什么? 感谢...
答案 0 :(得分:1)
我回答了我自己的问题。我不确定这是否是您的确切问题,因为您的代码看起来/工作正常。所以关于你的钥匙串访问,我猜它有点不同。这可能会有所帮助,也可能没有帮助,但可能会引导您朝着正确的方向前进。
答案 1 :(得分:0)
如果您的班级正在使用ARC,则每次都可以为我工作。
KeychainItemWrapper *testKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AppUniqueID" accessGroup:nil];
NSString *privateKey = [testKeychain objectForKey:(__bridge id)(kSecValueData)];
NSLog(@"Private Key: %@ \n", privateKey);