美文网首页
使用KeyChain处理用户名和密码

使用KeyChain处理用户名和密码

作者: GrayDang | 来源:发表于2018-06-25 17:23 被阅读0次

使用KeyChain处理用户名和密码

KeyChain

本地持久化用户名和密码是常见的需求。
为什么不用NSUserDefault来保存用户名和密码呢?因为NSUserDefault可以在资料沙盒中找到。
对应的沙盒路径:

Library -> Preferences -> bundleId.plist

只要找到这个文件,储存在里面的信息便被盗取。
另外,存在KeyChain里的信息是不会随APP被删除而删除的,还可以支持iCloud同步。

api

用到的api有以下4个:

SecItemAdd(CFDictionaryRef  _Nonnull attributes, CFTypeRef  _Nullable * _Nullable result)
SecItemUpdate(CFDictionaryRef  _Nonnull query, CFDictionaryRef  _Nonnull attributesToUpdate)
SecItemCopyMatching(CFDictionaryRef  _Nonnull query, CFTypeRef  _Nullable * _Nullable result)
SecItemDelete(CFDictionaryRef  _Nonnull query)

查询:

NSMutableDictionary *query = [NSMutableDictionary new];
[query setValue:service forKey:(__bridge id)kSecAttrService]; //标识
[query setValue:account forKey:(__bridge id)kSecAttrAccount];//账户
[query setValue:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; //储存密码
[query setValue:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];//设置返回数据
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &result);

增加:

NSMutableDictionary *query = [NSMutableDictionary new];
[query setValue:service forKey:(__bridge id)kSecAttrService]; //标识
[query setValue:account forKey:(__bridge id)kSecAttrAccount];//账户
[query setValue:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; //储存密码
[query setValue:pwdData forKey:(__bridge id)kSecValueData];
status = SecItemAdd((__bridge CFDictionaryRef)query, NULL);

更新:

NSMutableDictionary *query = [NSMutableDictionary new];
[query setValue:service forKey:(__bridge id)kSecAttrService]; //标识
[query setValue:account forKey:(__bridge id)kSecAttrAccount];//账户
[query setValue:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; //储存密码
NSMutableDictionary *newQuery = [NSMutableDictionary dictionary];
[newQuery setValue:pwdData forKey:(__bridge id)kSecValueData];
status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)newQuery);

删除:

NSMutableDictionary *query = [NSMutableDictionary new];
[query setValue:service forKey:(__bridge id)kSecAttrService]; //标识
[query setValue:account forKey:(__bridge id)kSecAttrAccount];//账户
[query setValue:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; //储存密码
OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query);

demo地址:https://github.com/graydang/ioskeychain

相关文章

  • 使用KeyChain处理用户名和密码

    使用KeyChain处理用户名和密码 KeyChain 本地持久化用户名和密码是常见的需求。为什么不用NSUser...

  • iOS Keychain使用说明

    前言 Keychain 在 Mac 上大家都比较熟悉, 主要进行一些敏感信息存储使用 如用户名,密码,网络密码,认...

  • 使用Keychain保存用户名 + 密码

    keychain用法: 这里不讲底层,只讲2个框架的使用 STKeychain(第三方开源) 和 Key...

  • 使用keychain保存用户名和密码等敏感信息 Keychain

    iOS的 keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独...

  • 本地保存用户名及密码

    方法一: 今天在做联网版本的离线操作时,需要使用本地验证密码和用户名,然后就发现了这个keychain方法。可以很...

  • iOS开发使用keychain保存用户名及密码

    KeyChain是苹果提供的一种安全的保存用户名、密码、证书的方式,将敏感信息保存在keychain中后,这些信息...

  • 2021-08-23

    iOS swift 钥匙串的Keychain 的详细使用 Keychain (密码管理系统) 数据并不存放在A...

  • Scrapy 使用代理

    一、使用开放代理(没有用户名和密码) 二、使用独享代理(有用户名和密码) 三、setting设置 开启下载中间件

  • ios Keychain存储

    iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证...

  • Python偷懒代码|持续更新

    1.urllib方式验证用户名和密码 2.Selenium方式需要验证用户名和密码 3.urllib使用代理Pro...

网友评论

      本文标题:使用KeyChain处理用户名和密码

      本文链接:https://www.haomeiwen.com/subject/znnyyftx.html