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 キーチェーンがバックグラウンドから値を取得しない

于 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 に答える