0
我正在爲iOS 7開發應用程序,並使用ARC。我正在使用Web服務,因此用戶必須使用用戶名和密碼登錄到Web服務。我知道這是不好的,只是存儲用戶名和密碼,所以我想用鑰匙串來存儲用戶名和密碼。如何在iOS 7中使用ARC存儲密碼
經過一番研究,似乎人們建議使用KeychainItemWrapper
,但是這與ARC不兼容。我如何使用ARC在iOS 7中使用鑰匙串存儲密碼?任何幫助和指導將不勝感激。
我正在爲iOS 7開發應用程序,並使用ARC。我正在使用Web服務,因此用戶必須使用用戶名和密碼登錄到Web服務。我知道這是不好的,只是存儲用戶名和密碼,所以我想用鑰匙串來存儲用戶名和密碼。如何在iOS 7中使用ARC存儲密碼
經過一番研究,似乎人們建議使用KeychainItemWrapper
,但是這與ARC不兼容。我如何使用ARC在iOS 7中使用鑰匙串存儲密碼?任何幫助和指導將不勝感激。
我使用以下命令:
+ (void)keyChainSaveKey:(NSString *)key data:(id)data
{
NSMutableDictionary *keychainQuery = [self getKeychainQuery:key];
SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
[keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData];
SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);
}
+ (id)keyChainLoadKey:(NSString *)key
{
id ret = nil;
NSMutableDictionary *keychainQuery = [self getKeychainQuery:key];
[keychainQuery setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
[keychainQuery setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
CFDataRef keyData = NULL;
if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
@try {
ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
}
@catch (NSException *e) {
//NS Log(@"Unarchive of %@ failed: %@", service, e);
}
@finally {}
}
if (keyData) CFRelease(keyData);
return ret;
}
+ (void)keyChainDeleteKey:(NSString *)service
{
NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
SecItemDelete((__bridge CFDictionaryRef)keychainQuery);
}
//helper
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)key
{
return [NSMutableDictionary dictionaryWithObjectsAndKeys:
(__bridge id)kSecClassGenericPassword, (__bridge id)kSecClass,
key, (__bridge id)kSecAttrService,
key, (__bridge id)kSecAttrAccount,
(__bridge id)kSecAttrAccessibleAfterFirstUnlock, (__bridge id)kSecAttrAccessible,
nil];
}
您可能需要
#import <CommonCrypto/CommonCryptor.h>
我不記得在那裏我發現這個代碼...所以我不能給信貸:(
這工作謝謝! – user2604504
這應該有所幫助 - http://stackoverflow.com/questions/5247912/saving-email-password-to-keychain-in-ios – raurora