我在我的应用程序中使用此代码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 并且我的应用程序崩溃了。当我saveRSAPublickey
第二次调用时:状态 ==errSecDuplicateItem
并运行 [CryptoUtil updateRSAPublicKey:publicKey appTag:appTag]
-> 成功。
调试时很难发现这个问题,因为它只出现在新设备中(从未安装过我的应用程序)。最后顺便发现了错误:set new appTag before call saveRSAPublicKey。我在 system.log 中看到:
4 月 6 日 12:30:29 MACs-MacBook-Pro 安全 [4372]:无法访问 hwaes 密钥
请帮我 !!!谢谢大家。