使用keychain保存用户密码,token等
来源:互联网 发布:市场花园知乎 编辑:程序博客网 时间:2024/05/29 08:46
iOS系统存储的数据都是在sandBox里面, 一旦删除App,沙盒也就不存在了,要想在手机中一直保存用户的个人信息 ,即使删除App之后,再次安装还有此信息,那么就可以用keychain(钥匙串)来保存信息。
通常情况下,iOS系统用NSUserDefaults存储数据信息, 但是对于一些私密信息, 比如密码,证书等等,就需要使用更为安全的keychain了,keychain里保存的信息不会因为App被删除而丢失,所以,可以利用这个keychain这个特点来保存设备唯一标识。新浪微博和百度都使用了该方式。
那么,如何在应用里使用keyChain呢, 我们需要导入Security.framework框架, keyChain的操作接口声明在头文件SecItem.h里.直接使用SecItem.h里面方法操作keychain.
+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service{
return [NSMutableDictionarydictionaryWithObjectsAndKeys:
(__bridge_transferid)kSecClassGenericPassword,
(__bridge_transferid)kSecClass,service,
(__bridge_transferid)kSecAttrService,service,
(__bridge_transferid)kSecAttrAccount,
(__bridge_transferid)kSecAttrAccessibleAfterFirstUnlock,
(__bridge_transferid)kSecAttrAccessible,
nil];
}
+ (void)saveKeychainValue:(NSString *)sValue key:(NSString *)sKey{
NSMutableDictionary * keychainQuery = [selfgetKeychainQuery:sKey];
SecItemDelete((__bridge_retainedCFDictionaryRef)keychainQuery);
[keychainQuery setObject:[NSKeyedArchiverarchivedDataWithRootObject:sValue]forKey:(__bridge_transferid)kSecValueData];
SecItemAdd((__bridge_retainedCFDictionaryRef)keychainQuery,NULL);
}
+ (NSString *)readKeychainValue:(NSString *)sKey
{
NSString *ret =nil;
NSMutableDictionary *keychainQuery = [selfgetKeychainQuery:sKey];
[keychainQuery setObject:(id)kCFBooleanTrueforKey:(__bridge_transferid)kSecReturnData];
[keychainQuery setObject:(__bridge_transferid)kSecMatchLimitOneforKey:(__bridge_transferid)kSecMatchLimit];
CFDataRef keyData =NULL;
if (SecItemCopyMatching((__bridgeCFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) ==noErr) {
@try {
ret = (NSString *)[NSKeyedUnarchiverunarchiveObjectWithData:(__bridgeNSData *)keyData];
} @catch (NSException *e) {
NSLog(@"Unarchive of %@ failed: %@", sKey, e);
} @finally {
}
}
if (keyData)
CFRelease(keyData);
return ret;
}
+ (void)deleteKeychainValue:(NSString *)sKey {
NSMutableDictionary *keychainQuery = [selfgetKeychainQuery:sKey];
SecItemDelete((__bridgeCFDictionaryRef)keychainQuery);
}
- 使用keychain保存用户密码,token等
- 使用keychain保存用户名和密码等敏感信息
- iOS 使用KeyChain保存数据
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- 使用keychain保存用户名和密码等敏感信息 KeychainItemWrapper和SFHFKeychainUtils。
- iOS密码保存(keychain简单使用)
- IOS使用sskeychain调用keychain保存密码
- 使用KeyChain保存和获取UDID
- 开源-人脸识别认证-java封装
- %1$s %1$d Android string (java & Android 格式化字符串)
- qt之 绘制时钟
- Extract Abends with OGG-01028 Non-Standard Redo Detected in 10g Compatible Format (文档 ID 1313864.1)
- 异常值处理
- 使用keychain保存用户密码,token等
- 集合2
- 32位eclipse使用64位jdk问题
- java程序main方法的参数String[] args
- @Configuration两种起作用的方法
- 【Android】Error: Expected resource of type styleable [ResourceType]
- 5.4日学习日志
- 手把手教大家将Dragonboard 410c打造成一个IP camera
- 秒杀系统架构分析与实战