使用Keychain保存用戶(hù)名 + 密碼

keychain用法: 這里不講底層,只講2個(gè)框架的使用 STKeychain(第三方開(kāi)源) 和 KeychainItemWrapper(蘋(píng)果官方demo)

1.KeychainItemWrapper 這個(gè)是蘋(píng)果的一個(gè)官方demo,里面使用大概如下

    /** 初始化一個(gè)保存用戶(hù)帳號(hào)的KeychainItemWrapper */
    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number" accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];  


    // 一般來(lái)說(shuō) 增刪改查, 增用保存,刪除這邊是reset,改則是在增加一次用相同的key,查則是用objectForkey
    //保存帳號(hào)
    [wrapper setObject:@"<帳號(hào)>" forKey:(id)kSecAttrAccount];    

    //保存密碼
    [wrapper setObject:@"<帳號(hào)密碼>" forKey:(id)kSecValueData];    

    //從keychain里取出帳號(hào)密碼
    NSString *password = [wrapper objectForKey:(id)kSecValueData];      

    //清空設(shè)置
    [wrapper resetKeychainItem];

這里免得account一般是你的用戶(hù)獨(dú)有,如用戶(hù)id,用戶(hù)名等, 而其他的key一般用的都是蘋(píng)果官方提供

     kSecAttrAccessGroup        -       CFStringRef
     kSecAttrCreationDate       -       CFDateRef
     kSecAttrModificationDate        -      CFDateRef
     kSecAttrDescription            -       CFStringRef
     kSecAttrComment            -       CFStringRef      
     kSecAttrCreator            -       CFNumberRef      
     kSecAttrType                           -       CFNumberRef
     kSecAttrLabel              -       CFStringRef
     kSecAttrIsInvisible            -       CFBooleanRef
     kSecAttrIsNegative         -       CFBooleanRef
     kSecAttrAccount            -       CFStringRef
     kSecAttrService            -       CFStringRef
     kSecAttrGeneric            -       CFDataRef

2,STKeychain 這個(gè)在github和許多工具類(lèi)放在一起,看起來(lái)很有效的樣子
使用這個(gè)框架則是只能用來(lái)存儲(chǔ)用戶(hù)名+密碼的組合,而蘋(píng)果官方demo還是可以一定程度自定義的
這邊提供了三個(gè)方法進(jìn)行 增(改)刪查

//獲取
- (IBAction)getKeyChain:(id)sender {

  NSError *error;
  NSString *str = [STKeychain getPasswordForUsername:@"zhangsan" andServiceName:@"com.rac.keyChain" error:&error];
  if(error || !str){
      NSLog(@"?從Keychain里獲取密碼出錯(cuò):%@", error);
  } else{
      NSLog(@"?從Keychain里獲取密碼成功!密碼為%@",str);
  }
// 這里一個(gè)label用來(lái)看獲取的密碼
self.label.text = str;
}

//存儲(chǔ)
- (IBAction)storeKeyChain:(id)sender {

  NSError *error;
  BOOL saved = [STKeychain storeUsername:@"zhangsan" andPassword:@"123456" forServiceName:@"com.rac.keyChain" updateExisting:error error:&error];
  if (!saved) {
      NSLog(@"?Keychain保存密碼時(shí)出錯(cuò):%@", error);
  }else{
      NSLog(@"?Keychain保存密碼成功!");
  }
}

//刪除
- (IBAction)deleteKeyChain:(id)sender {

  NSError *error;
  BOOL isDeleted;
  isDeleted = [STKeychain deleteItemForUsername:@"zhangsan" andServiceName:@"com.rac.keyChain" error:&error];
  if (!isDeleted) {
      NSLog(@"?Keychain刪除");
      NSLog(@"%@",error);
  }else{        
      NSLog(@"?Keychain刪除成功");
  }
}

其實(shí)如果你只需要存儲(chǔ)用戶(hù)名和密碼, 這個(gè)第三方的框架是能夠滿(mǎn)足你的需求,而且使用起來(lái)也非常方便, 另外,這些都是調(diào)用了蘋(píng)果的一些方法,類(lèi)似
SecItemDelete
SecItemCopyMatching
SecItemUpdate
SecItemAdd
使用這些方法,根據(jù)我們項(xiàng)目的需求,也可以快速便捷的自定義一些我們自己需要使用的keychain工具類(lèi)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,309評(píng)論 4 61
  • 今天給大家推薦一本關(guān)于閱讀的書(shū),書(shū)名是《如何閱讀一本書(shū)》。 一直以來(lái),自認(rèn)為自己是個(gè)不會(huì)閱讀的人,經(jīng)常有這樣的感覺(jué)...
    六弦起舞閱讀 274評(píng)論 0 0
  • 制造反差,沖突 沖突就是眼球人的大腦具有模式化編碼,模式化識(shí)別的能力,但是沖突的東西難以識(shí)別,于是會(huì)首先被發(fā)現(xiàn),重...
    復(fù)蘇森林閱讀 178評(píng)論 0 1
  • 我們?cè)谏钪泻苋菀子龅揭恍┠贻p人,他們剛出來(lái)工作不久,每個(gè)月的收入刨去燈油火蠟的開(kāi)支后,所剩不多,于是他們索性就想...
    夜游君閱讀 3,994評(píng)論 0 10

友情鏈接更多精彩內(nèi)容