為了安全地儲存使用者的密碼,建議將密碼儲存於KeyChain中。哈~要不是資深工程師提點,不然我真的還是會儲存在User Defaults中呢!
KeyChain是iOS提供的一種安全保存私密資料的方式,整個系統的keychain被保存在隱秘的位置(/private/var/Keychains/keychain-2.db),其中保存的資料是經過加密的。
KeyChain優點:
- 每個組( keychain-access-groups )之間資料存取隔離,沒有權限的app無法讀取他人資料,保證資料的安全
- 全域性統一儲存,即使刪除app,keychain中的資料依然存在,下次重新安裝app還能存取
- 存儲後的資料會加密
- 同一個組的app可以共享keychain中的資料
KeyChain缺點:
- 刪除app後不會清除keychain裡的資料,如果儲存密碼等敏感性資料有一定的風險。(越獄後keychain能被導出來)
為了更簡易地使用它,直接到GitHub下載SFHFKeychainUtils第三方套件,接著匯入到專案中。
簡介功能:A small ARC compliant utility to interact with Apple’s Keychain Services.
#import "SFHFKeychainUtils.h"
// 取可以識別的名字
static NSString *const RLKeychainUserName = @"HTKeychainUserName";
static NSString *const RLKeychainServiceName = @"HTKeychainServiceName";
#pragma mark - Key Chain Methods
// 取得密碼
+(NSString *)loginToken
{
return [SFHFKeychainUtils getPasswordForUsername:RLKeychainUserName andServiceName:RLKeychainServiceName error:nil];
}
// 設定密碼
+(void)setLoginToken:(NSString *)loginToken
{
[SFHFKeychainUtils storeUsername:RLKeychainUserName andPassword:loginToken forServiceName:RLKeychainServiceName updateExisting:YES error:nil];
}
// 移除密碼
+(void)removeLoginToken
{
[SFHFKeychainUtils deleteItemForUsername:RLKeychainUserName andServiceName:RLKeychainServiceName error:nil];
}
此套件只有四個方法,使用過後就知道將密碼放到KeyChain中相當簡便!
參考:GitHub – SFHFKeychainUtils、iOS開發– KeyChain使用與共享數據。

Comments on: "[iOS] 將密碼儲存於KeyChain" (1)
[…] 很幸運地找到一個方便使用的Library,拿Demo用的View Controller來改就完成了大半!設定密碼、修改密碼、刪除密碼三個功能一次滿足!再搭配上將密碼存到KeyChain中的Library,新的功能就在兩小時內完成~ […]
讚讚