私は iOS での暗号化にかなり慣れていないため、解決策を見つけることができないというエラーが発生しています。
iOS キーチェーンの公開鍵への SecKeyRef を取得して使用しようとすると、常に EXC_BAD_ACCESS エラーが発生します。SecKeyRef (以下のコードでは "publicKeyReference" と呼ばれます) は、最初は NULL に設定されていますが、SecItemCopyMatching メソッドが呼び出された後に値を持つ必要があります。これは、デバッガー ウィンドウのメモリ アドレスから確認できます。
これが私のコードです:
SecKeyRef publicKeyReference = NULL;
NSData* publicTag = [publicKeyIdentifier dataUsingEncoding:NSUTF8StringEncoding];
NSMutableDictionary *queryPublicKey = [[NSMutableDictionary alloc] init];
// Set the public key query dictionary.
[queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
[queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag];
[queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
[queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnPersistentRef];
// Get the key.
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPublicKey, (CFTypeRef *)&publicKeyReference);
// Encrypt using the public.
sanityCheck = SecKeyEncrypt( publicKeyReference,
PADDING,
plainBuffer,
plainBufferSize,
&cipherBuffer[0],
&cipherBufferSize
);
エラーとデバッグ ウィンドウのスクリーンショットを次に示します。


アドレスの値が「0x0」ではないため、SecKeyRef に何かが割り当てられているようですが、何を試しても EXC_BAD_ACCESS エラーが発生し続けています。この問題について、あらゆる助けをいただければ幸いです。