1

このコードhttp://wiki.effectiveprogramming.com/index.php?title=CocoaEncryption&redirect=noをアプリケーションで使用して、ログイン機能を実装しています。しかし、エラー メソッド saveRSAPublicKey があります。

+ (BOOL)saveRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag overwrite:(BOOL)overwrite {
    //Error here (when first call) - Program received signal: "EXC_BAD_ACCESS" -> crash
    OSStatus status = SecItemAdd((CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
                                                   (id)kSecClassKey, kSecClass,
                                                   (id)kSecAttrKeyTypeRSA, kSecAttrKeyType,
                                                   (id)kSecAttrKeyClassPublic, kSecAttrKeyClass,
                                                   kCFBooleanTrue, kSecAttrIsPermanent,
                                                   [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag,
                                                   publicKey, kSecValueData,
                                                   kCFBooleanTrue, kSecReturnPersistentRef,
                                                   nil],
                                                   NULL);   //don't need public key ref

    DebugLog(@"result = %@", [KeychainUtil fetchStatus:status]);

    if(status == noErr)
        return YES;
    else if(status == errSecDuplicateItem && overwrite == YES)
        return [CryptoUtil updateRSAPublicKey:publicKey appTag:appTag];

    return NO;
}

saveRSAPublickey初めて呼び出すと、OSStatus を作成できず、アプリケーションがクラッシュします。2 回目の呼び出しsaveRSAPublickey時: status ==errSecDuplicateItemおよび実行 [CryptoUtil updateRSAPublicKey:publicKey appTag:appTag]-> 成功。

この問題は新しいデバイスにしか表示されないため (アプリをインストールしたことがないため)、デバッグ時にこの問題を見つけるのは困難です。最後に、saveRSAPublicKey を呼び出す前に新しい appTag を設定してください。system.log に次のように表示されます。

4 月 6 日 12:30:29 MACs-MacBook-Pro securityd[4372]: hwaes キーにアクセスできません

私を助けてください !!!皆さんありがとう。

4

2 に答える 2

1

2 番目の引数 (結果が出力される場所)を渡す場合、呼び出し時にセットNULLを使用することはできません(変更するか、単に削除するだけです)。Return Type KeySecItemAdd()kCFBooleanTrue, kSecReturnPersistentRefkCFBooleanFalse, kSecReturnPersistentRef

私は今これに関するバグレポートを提出しました。

于 2013-10-11T13:49:30.587 に答える
0

publicKey、またはおそらくappTagには、あなたが思っていることは含まれていないと思います。それらをログアウトしてみてください。

于 2012-04-06T04:01:22.887 に答える