当前位置: 首页 > news >正文

网站备案关站精准营销系统价值

网站备案关站,精准营销系统价值,阿里云虚拟主机免费版,开发微信哪家好级别#xff1a; ★☆☆☆☆ 标签#xff1a;「钥匙串」「keychain」「iOS」 作者#xff1a; WYW 审校#xff1a; QiShare团队 前言 #xff1a; 项目中有时会需要存储敏感信息#xff08;如密码、密钥等#xff09;#xff0c;苹果官方提供了一种存储机制--钥匙串 ★☆☆☆☆ 标签「钥匙串」「keychain」「iOS」 作者 WYW 审校 QiShare团队 前言 项目中有时会需要存储敏感信息如密码、密钥等苹果官方提供了一种存储机制--钥匙串keychain。 keychain是一种存储在硬盘上的加密的数据库。这个可能是卸载App后keychain信息还在的原因。 keychain适合存储 较小的数据量不超过上千字节或上兆字节的内容。 笔者做了一个关于keychain的增、删、改、查的DemoQiKeychain给大家介绍下keychain的基本使用。 下图确保keychain中用户的信息安全有利于我们直观了解keychain。 DemoQiKeychain解读 笔者用DemoQiKeychain做了4件事。 增加存储用户名、密码到keychain查询根据用户名从keychain中查询密码删除从keychain中删除用户名、密码等相应信息修改修改keychain中的用户名对应的密码 DemoQiKeychain对keychain的操作效果如下 存储用户名 “QiShare”密码1234查询用户名为“QiShare”的密码显示密码为1234修改用户名“QiShare”的密码为“123456”查询“QiShare”的密码显示为“123456”把“QiShare”从keychain中删除。 keychain基本使用API keychain有四个常用的API用于增、删、改、查keychain中的数据。 keychain中的数据子项是以item的形式存在的。 举个例子就存储用户名、密码的情景来说每个item包含存储的用户名和密码及其他属性信息keychain中包含多个用户名和密码的item。 下图把数据和属性存储到keychain中利于我们理解存储过程 SecItemAdd添加一个item或多个items到keychain OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef * __nullable CF_RETURNS_RETAINED result)API_AVAILABLE(macos(10.6), ios(2.0)); 复制代码存储关键代码 NSDictionary *saveSecItems {(id)kSecClass: (id)kSecClassGenericPassword,(id)kSecAttrService: service,(id)kSecAttrAccount: account,(id)kSecValueData: passwordData};OSStatus saveStatus SecItemAdd((CFDictionaryRef)saveSecItems, NULL); 复制代码SecItemCopyMatching返回匹配搜索查询的一个item或多个items OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_RETAINED result)API_AVAILABLE(macos(10.6), ios(2.0)); 复制代码查询关键代码 NSDictionary *matchSecItems {(id)kSecClass: (id)kSecClassGenericPassword,(id)kSecAttrService: service,(id)kSecAttrAccount: account,(id)kSecMatchLimit: (id)kSecMatchLimitOne,(id)kSecReturnData: (YES)};CFTypeRef dataRef nil;OSStatus errorCode SecItemCopyMatching((CFDictionaryRef)matchSecItems, (CFTypeRef *)dataRef); 复制代码SecItemUpdate修改匹配搜索查询的一个item或多个items OSStatus SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate)API_AVAILABLE(macos(10.6), ios(2.0)); 复制代码 注意更新代码这部分笔者开始的时候遇到一些问题还要多谢组内成员尤其是昆哥的指教。 SecItemUpdate接收了2个参数query和attributesToUpdate。 第一个参数query用于查询到相应的item 第二个参数attributesToUpdate用于传入要更新的信息。 笔者曾错误地给第二个参数attributesToUpdate传入过(id)kSecClass: (id)kSecClassGenericPassword要更改的内容。 结果报错为errSecNoSuchAttr -25303, /* The specified attribute does not exist. */ 更新关键代码 NSDictionary *queryItems {(id)kSecClass: (id)kSecClassGenericPassword,(id)kSecAttrService: service,(id)kSecAttrAccount: account};NSData *passwordData [password dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *updatedItems {(id)kSecValueData: passwordData,};OSStatus updateStatus SecItemUpdate((CFDictionaryRef)queryItems, (CFDictionaryRef)updatedItems); 复制代码SecItemDelete删除匹配搜索查询的一个item或多个items OSStatus SecItemDelete(CFDictionaryRef query)API_AVAILABLE(macos(10.6), ios(2.0)); 复制代码删除关键代码 NSDictionary *deleteSecItems {(id)kSecClass: (id)kSecClassGenericPassword,(id)kSecAttrService: service,(id)kSecAttrAccount: account};OSStatus errorCode SecItemDelete((CFDictionaryRef)deleteSecItems); 复制代码显然keychain的增删改查相关的API都需要设置相应的属性字典分别代指上述的saveSecItems 、matchSecItems 、queryItems 、updatedItems 、deleteSecItems 属性字典的key、value常用的有(这部分内容读者也可直接看文档) (id)kSecClass: (id)kSecClassGenericPassword kSecClass表示item的class (id)kSecClass的值表明一个通用的密码item笔者一般都传入kSecClassGenericPassword(id)kSecAttrService: service kSecAttrService的value用于表明item的service(id)kSecAttrAccount: account (id)kSecAttrAccoun的值表明item的帐户名(id)kSecValueData: passwordData (id)kSecValueData表示item的数据(id)kSecMatchLimit: (id)kSecMatchLimitOne, (id)kSecMatchLimit 有2个值(id)kSecMatchLimitOne、和(id)kSecMatchLimitAll kSecMatchLimitOne表示只匹配第一个符合条件的item kSecMatchLimitAll表示匹配不限数量的items(id)kSecReturnData: (YES) (id)kSecReturnData的值是一个Boolean类型的值用于确定是否返回item datakSecClass的值表示item的class kSecClass的值表明一个通用的密码item笔者一般都传入的kSecClassGenericPasswordkSecClass的值表示item的class kSecClass的值表明一个通用的密码item笔者一般都传入的kSecClassGenericPassword DemoQiKeychain相关代码 在DemoQiKeychain中笔者对keychain相关使用的API进行了封装。获取DemoQiKeychainGitHub地址QiKeychain。 注意笔者后来封装的代码修改了保存操作的逻辑。 修改内容为在保存用户名密码的时候 - 先在keychain中查询用户名是否存在 - 若存在就进行更新操作 - 若不存在就进行保存操作。 相应示意图使用钥匙串存储网络密码如下 参考学习地址 Keychain ServicesSAMKeychain小编微信可加并拉入《QiShare技术交流群》。 关注我们的途径有QiShare(简书)QiShare(掘金)QiShare(知乎)QiShare(GitHub)QiShare(CocoaChina)QiShare(StackOverflow) QiShare(微信公众号) 推荐文章iOS 自定义拖拽式控件QiDragViewiOS 自定义卡片式控件QiCardViewiOS Wireshark抓包iOS Charles抓包初探TCPIP、UDP初探奇舞周刊
http://www.pierceye.com/news/294721/

相关文章:

  • 米拓建站免费模板wordpress那个主题收录好
  • 网站后台中小型网站建设的基本流程
  • 一键做网站的软件爱互融网站开发合同
  • 平顶山市哪里有做网站的高端的扬中网站建设
  • 网站定制电话如何自己开公众号
  • app开发网站建设及开发专业济南网站建设价格
  • 网站建设新闻分享免费制作网站app
  • 海口网站建设高端wordpress 论坛那
  • 谁能帮我做网站百度推广登录平台怎么收费
  • 有关于网站建设的论文如何开发一个微信公众号
  • 深圳网站建制作网上写文章用什么软件
  • 网站模版自适应网站建设全包方案
  • 广州网站建设鞍山家电网站首页制作
  • 西安注册公司网站网站建设找a金手指
  • 浙江省住房和城乡建设厅网站打不开设计书籍频道开放说明
  • 阿里巴巴 网站建设遵义网警
  • 宁夏建设厅网站官网如何做DJ网站
  • 龙岩做网站公司哪家好erp系统与网站对接长沙
  • 做二手房需要用到哪些网站搜集房源找人做设计的网站
  • 建设银行河北分行招聘网站可以下载新闻视频的网站
  • 凡客官网旗舰店襄阳seo关键词优化公司
  • 区域门户网站源码健身网站建设
  • 动漫网站建设赚钱吗三端互通传奇手游开服列表
  • 网站建设前的需求分析手机免费制作网站模板免费下载
  • 网站兼容ie7接私活做网站要不要签合同
  • 广州网站建设首选快优wordpress拖拽建站
  • 网站开发 播放音频amr个人网站设计案例
  • 建设一个网站可以采用那几方案常用的网页制作工具有什么
  • 摄影看图网站河南省交通工程造价信息网
  • 网站架构发展历程的思考和心得体会软件开发网站开发培训