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

      

  • 相关阅读:
    看云学习文档列表
    linux&&ubutun 21.06使用查询资料
    element-admin 查询资料笔记
    tp6 composer install 报Your requirements could not be resolved to an installable set of packages。
    centos 7 install npm
    centos 7 dev
    解決npm run dev 报: 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件 错误
    解決vue-cli · Failed to download repo vuejs-templates/webpack: tunneling socket could not be established, cause=getaddrinfo ENOTFOUND 10809报错问题
    Linux创建命令快捷方式
    JS 闭包写法
  • 原文地址:https://www.cnblogs.com/yufang/p/11907982.html
Copyright © 2011-2022 走看看