3

私は 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
                       );        

エラーとデバッグ ウィンドウのスクリーンショットを次に示します。

エラーのあるコードの Xcode バージョン

デバッガ出力

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

4

1 に答える 1