• 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);
           }
    

      

  • 相关阅读:
    4819: [Sdoi2017]新生舞会 分数规划
    [Sdoi2017]序列计数 矩阵优化dp
    SDOI2017相关分析 线段树
    loj SDOI2017数字表格
    bzoj 2527: [Poi2011]Meteors
    BZOJ2440: [中山市选2011]完全平方数
    GCD与莫比乌斯反演的勾当
    2870: 最长道路tree
    bzoj2152: 聪聪可可 点分治
    3545: [ONTAK2010]Peaks 平衡树,最小生成树
  • 原文地址:https://www.cnblogs.com/yufang/p/11907982.html
Copyright © 2020-2023  润新知