zoukankan      html  css  js  c++  java
  • keychain的使用

    存储

     NSDictionary *attributes = @{
              (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
              (__bridge id)kSecValueData : [@"123456" dataUsingEncoding:NSUTF8StringEncoding],
              (__bridge id)kSecAttrAccount : @"zhangsan",
              (__bridge id)kSecAttrService : @"loginPassword",
          };
          OSStatus status = SecItemAdd((__bridge CFDictionaryRef)attributes, nil);
          if (status == errSecSuccess) {
              NSLog(@"存储成功");
           }else{
                NSLog(@"存储失败");
           }
    OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef  _Nullable *result);
    

    函数说明:添加一个或多个itemd到钥匙串

    attributes 描述要添加的item的字典

    一个标准的字典包括如下内容

    1.  item的类别,不同的属性和行为需要申请不同的类别,key是kSecClass,表示存储的内容是密码还是证书还是加密的内容等,对应的value有以下几种
      1. kSecClassGenericPassword 一般的密码
      2. kSecClassInternetPassword 互联网密码
      3. kSecClassCertificate      证书
      4. kSecClassKey                   加密的内容
      5. kSecClassIdentity              身份相关的
    2. 要存储的数据,key是kSecValueData,表示你要存储的数据
    3. 可选的属性,比如一般密码包括的属性,例如kSecAttrAccessible 什么时候可以访问这个item,对应的值有
      1. kSecAttrAccessibleWhenUnlocked(当处于解锁状态)
      2. kSecAttrAccessibleAfterFirstUnlock(在第一次解锁之后)
      3. kSecAttrAccessibleAlways(始终)等等鉴于对于不同类别

          分别有不同的属性,而且比较多,此处不在赘述,具体查api

           4.可选的返回类型,可以指定多个类型,因为是添加,所以该函数不需要

    读取

    NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
                                   (__bridge id)kSecReturnData : @YES,
                                   (__bridge id)kSecMatchLimit : (__bridge id)kSecMatchLimitOne,
                                   (__bridge id)kSecAttrAccount : @"zhangsan",
                                   (__bridge id)kSecAttrService : @"loginPassword",
                                   };
           
           CFTypeRef dataTypeRef = NULL;
           
           OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &dataTypeRef);
         
           if (status == errSecSuccess) {
               NSString *pwd = [[NSString alloc] initWithData:(__bridge NSData * _Nonnull)(dataTypeRef) encoding:NSUTF8StringEncoding];
               NSLog(@"==result:%@", pwd);
           }
    

      

  • 相关阅读:
    一个提高N倍系统新能的编程点,却总是被普通开发们遗忘
    工作不到一年,做出了100k系统,老板给我升职加薪
    offer收割机也有方法论
    最长公共前缀
    罗马数字转整数
    回文数
    整数反转
    两数之和
    网页中Office和pdf相关文件导出
    搭建一个低配版的Mock Server
  • 原文地址:https://www.cnblogs.com/yufang/p/11907982.html
Copyright © 2011-2022 走看看