天天看點

使用keychain儲存使用者名和密碼等敏感資訊 KeychainItemWrapper和SFHFKeychainUtils。

iOS的keychain服務提供了一種安全的儲存私密資訊(密碼,序列号,證書等)的方式,每個ios程式都有一個獨立的keychain存儲。相對于NSUserDefaults、檔案儲存等一般方式,keychain儲存更為安全,而且keychain裡儲存的資訊不會因App被删除而丢失,是以在重裝App後,keychain裡的資料還能使用。從ios 3。0開始,跨程式分享keychain變得可行。

如何需要在應用裡使用使用keyChain,我們需要導入Security.framework ,keychain的操作接口聲明在頭檔案SecItem.h裡。直接使用SecItem.h裡方法操作keychain,需要寫的代碼較為複雜,為減輕咱們程式員的開發,我們可以使用一些已經封裝好了的工具類,下面我會簡單介紹下我用過的兩個工具類:KeychainItemWrapper和SFHFKeychainUtils。

KeychainItemWrapper是apple官方例子“GenericKeychain”裡一個通路keychain常用操作的封裝類,在官網上下載下傳了GenericKeychain項目後,隻需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷貝到我們項目,并導入Security.framework 。KeychainItemWrapper的用法:

KeychainItemWrapper  *wrapper  =  [ [KeychainItemWrapper alloc ] initWithIdentifier :@ "Account Number"                                                                    accessGroup :@ "YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier" ] ;     //儲存帳号 [wrapper setObject :@ "<帳号>" forKey : (id )kSecAttrAccount ] ;       //儲存密碼 [wrapper setObject :@ "<帳号密碼>" forKey : (id )kSecValueData ] ;       //從keychain裡取出帳号密碼 NSString  *password  =  [wrapper objectForKey : (id )kSecValueData ] ;         //清空設定 [wrapper resetKeychainItem ] ;

其中方法“- (void)setObject:(id)inObject forKey:(id)key;”裡參數“forKey”的值應該是Security.framework 裡頭檔案“SecItem.h”裡定義好的key,用其他字元串做key程式會崩潰!

SFHFKeychainUtils是另一個封裝了KeyChain簡單操作的第三方類庫,使用上比KeychainItemWrapper要簡單點,SFHFKeychainUtils隻提供了擷取、儲存和删除三個方法:

SFHFKeychainUtils 提供了在 iOS keychain中安全的存儲密碼的工具

下載下傳位址https://github.com/ldandersen/scifihifi-iphone/tree/master/security

1、引入Security.frameWork架構。

2、引入頭檔案:SFHKeychainUtils.h.

3、存密碼:

[SFHFKeychainUtils storeUsername:@"dd" andPassword:@"aa"forServiceName:SERVICE_NAME updateExisting:1 error:nil];

[SFHFKeychainUtils deleteItemForUsername:@"dd" andServiceName:SERVICE_NAME error:nil];

4、取密碼:

NSString *passWord =  [SFHFKeychainUtils getPasswordForUsername:@"dd"andServiceName:SERVICE_NAME error:nil];