你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 有關Keychain服務,你需要了解這些

有關Keychain服務,你需要了解這些

編輯:IOS開發基礎

本文為投稿文章,原文

在iOS系統中,Keychain提供了安全的存儲服務,用來存儲一些敏感信息。但是在日常開發中,我們經常會忽視這個蘋果自薦的功能,本文的目的就是引起開發者的重視,敏感信息盡量使用Keychain服務。

NSUserDefaults不安全

NSUserDefaults其實是plist文件中鍵值存儲,並且最大的問題是存在與沙盒中,這就對安全性埋下了隱患。如果攻擊者破解app,拿到了沙盒中的數據,就會造成數據洩漏,後果不堪設想。

當然,一般也不會有把密碼直接使用NSUserDefaults存儲的,都會進行加密、或者是多重加密後再進行NSUserDefaults存儲。這麼做其實是可行的,前提是加密算法不能洩漏。有個小問題就是,如果用戶刪掉app重裝的話,之前所有存儲的敏感信息都會消失。比如,一個用戶誤刪了使用NSUserDefaults存儲密碼的app,當重新安裝之後,由於以前是記住密碼免登錄,只因為自己操作不當,接下來要進入找回密碼功能,重新修改密碼才能再次使用app。這對用戶來說是一種相當不友好的體驗。

所以,正確的姿勢是使用Keychain服務來存儲。Keychain保存的數據不僅僅是加密過的,而且由於Keychain是存在與沙盒之外的,當應用刪除之後,app存儲的數據並沒有被刪掉,第二次安裝時只要讀取Keychain裡的數據,即可得到以前存儲的信息。

Keychain使用場景

  • 存儲隱私信息

在iOS系統中,最常用的keychain服務就是存儲用戶密碼了。使用keychain保存用戶密碼最大的好處已經在上面說過,個人極力推薦這麼做。

  • 數據共享

如果我們有多個app,它們之間需要共享一些數據,以提供更好的用戶體驗,那麼使用Keychain群組可以實現。但前提是同一個公司的產品才能共享,比如com.hyyy.test1和com.hyyy.test2兩個同一公司下的不同產品之前可以實現數據共享。

  • 設備唯一標示存儲

在iOS中,為了在蘋果的打壓下獲取唯一標示符,開發者們也是想盡了辦法,目前最好的方式就是獲取IDFV,並將其存儲到keychain中。IDFV是設備區別應用提供商的,一般來說可以作為應用唯一標示符。但是IDFV缺陷就是當設備刪除了該所有應用提供商的app之後,IDFV值會發生變化,所以IDFV+Keychain的組合目前被經常用到,來替代UDID的作用。特別是加上Keychain的共享服務,可以使應用提供商下的所有app下獲取的IDFV都不會發生變化。這一服務可以說是目前最佳的識別用戶的辦法。

  • 其他用處

當然,不同app的需求是不一樣的,如果你需要存儲一些信息,即使app刪掉後也不會丟失,那麼使用Keychain服務可以完美地實現這點。

實踐總結

其實,所有的這些都是本人摸索出來的,並且實現了一個Swift 3下的簡單Keychain工具,叫HYKeychainHelper。這個框架是參考大名鼎鼎的SAMKeychain和蘋果官方的GenericKeychain實現的,如果您的Swfit項目需要使用到Keychain,希望這個可以幫到您,HYKeychainHelper操作起來也比較簡單,如果您之前使用過SAMKeychain的話,那更容易了。

HYKeychainHelper的用法也比較簡單,為了更好上手,語法采用和SAMKeychain基本一致。具體如下:

/// query account's password

HYKeychainHelper.password(service: "your_service_name", account: "your_account_name")

/// add or update an account

HYKeychainHelper.set(password: "your_password", service: "your_service_name", account: "your_account_name")

/// delete an account

HYKeychainHelper.deletePassword(service: "your_service_name", account: "your_account_name")

/// all accounts

HYKeychainHelper.allAccounts(forService: "your_service_name")

對於更多的用法,請查看HYKeychainHelper獲取更多細節。

另外,對Keychain的了解難免有些遺漏,如果對Keychain有更多的看法,歡迎留言給我,對自己來說也是一種收獲!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved