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 下載地址。只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷貝到我們項目,并導入Security.framework 。KeychainItemWrapper的用法:
/** 初始化一個保存用戶帳號的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中安全的存儲密碼的工具
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];