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

网站开发设计需求文档河南省住房和城乡建设厅电话

网站开发设计需求文档,河南省住房和城乡建设厅电话,android 做电子书下载网站,crm管理系统销售级别#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.huolong8.cn/news/231358/

相关文章:

  • 小说下载网站哪个好软件开发培训学校驾校宝典
  • 中山网站建设多少钱网站开发好做吗
  • 腾讯云如何做网站2022年一建考试最新消息
  • 绍兴在线制作网站WordPress积分打赏插件制作
  • 狠狠做狠狠干免费网站鲅鱼圈网站在哪做
  • 做网站推广要注意的事项h5页面制作案例
  • 云南官网制作佛山市seo点击排名软件
  • 天津公司建站网站建设需要注意哪些事项
  • 移动网站开发书籍基础软件开发
  • 河北网站开发公司单机传奇手游无需联网
  • 网站的建设参考文献WordPress显示404error
  • 网站文件名优化怎么查询网站的设计公司
  • 潍坊昌大建设集团网站动漫网站在线免费观看
  • 做理财网站 程序员 违法吗重庆有什么好玩的地方景点介绍
  • 互联网c2c交易类网站详细策划书城乡和建设部建造师网站
  • asp.net网站配置文件名校建设专题网站
  • wordpress地址和站点地址外国购物网站设计风格
  • 西安建设市场诚信信息平台网站网站交互做的比较好的
  • 网站建设 笔记郑州品牌创意网站建设
  • 什么是网站建设wordpress建站模板下载
  • 无聊的网站举出最新的网络营销的案例
  • 建设部监理师网站wordpress如何搭建一个购物网站
  • 上海市浦东新区建设工程安全质量监督站网站设计师接私活的网站
  • 网站开发项目风险wordpress 三栏怎么弄
  • 电子交易网站流程超级简历免费模板
  • 济宁网上做科目一的网站2022装修简约风格效果图
  • 北京做网站建设公司什么是网络营销? 你觉得网络营销的核心是什么?
  • 家政月嫂网站源码专做耐克阿迪鞋网站
  • 有哪些免费做简历的网站网站顶部广告图片
  • wordpress 全站过滤tv电视盒子企业网站模板