このコード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 キーにアクセスできません
私を助けてください !!!皆さんありがとう。