我在我的應用程序中使用此代碼http://wiki.effectiveprogramming.com/index.php?title=CocoaEncryption&redirect=no來實現登錄功能。但我有一個錯誤的方法saveRSAPublicKey:Objective C - SecItemAdd有錯誤:EXC_BAD_ACCESS(第一次)和errSecDuplicateItem(第二次)
+ (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和我的應用程序崩潰。 當我第二次撥打saveRSAPublickey
時:狀態== errSecDuplicateItem
並運行[CryptoUtil updateRSAPublicKey:publicKey appTag:appTag]
- >成功。
調試時很難發現這個問題,因爲它只出現在新設備中(從未安裝過我的應用程序)。最後,我發現錯誤的方式:在調用saveRSAPublicKey之前設置新的appTag。我看到在SYSTEM.LOG:
4月6日12時30分29秒的MAC-的MacBook-Pro的securityd [4372]:無法訪問hwaes關鍵
請幫幫我! 謝謝大家。
應該是一個評論恕我直言。 – CodaFi 2012-04-06 04:08:07
我花了太多的時間來調試,我確信:publicKey是正確的。我有一個「appTag」變量是const字符串。如果我想恢復錯誤,我更改「appTag」變量的值。 – 2012-04-06 04:19:23
系統日誌: Apr 6 11:35:58 MACs-MacBook-Pro安全[4301]:無法訪問hwaes密鑰 Apr 6 11:36:12 MACs-MacBook-Pro [0x0-0x13013] .com.google。鉻[176]:[176:-1272877056:12564130414539:錯誤:spdy_session.cc(1386)] Spdy流關閉:6 – 2012-04-06 04:40:38