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

來源:互聯網
上載者:User

標籤:

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的用法:

 

[objc] view plaincopy
  1. /** 初始化一個儲存使用者帳號的KeychainItemWrapper */  
  2. KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"  
  3.                                                                    accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];    
  4.    
  5. //儲存帳號  
  6. [wrapper setObject:@"<帳號>" forKey:(id)kSecAttrAccount];      
  7.    
  8. //儲存密碼  
  9. [wrapper setObject:@"<帳號密碼>" forKey:(id)kSecValueData];      
  10.    
  11. //從keychain裡取出帳號密碼  
  12. NSString *password = [wrapper objectForKey:(id)kSecValueData];        
  13.    
  14. //清空設定  
  15. [wrapper resetKeychainItem];  

 

 

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

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

 

[objc] view plaincopy
  1. #import <UIKit/UIKit.h>    
  2.    
  3. @interface SFHFKeychainUtils : NSObject {    
  4.    
  5. }    
  6.    
  7. /** 從Keychain裡擷取使用者密碼 
  8.  *param username 使用者名稱 
  9.  *param serviceName 服務名 
  10.  *return NSString 使用者名稱對應的密碼 
  11.  */  
  12. + (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;    
  13.    
  14. /** 
  15.  *把使用者的密碼儲存到Keychain裡 
  16.  *@param username 使用者名稱 
  17.  *@param password 要儲存的密碼 
  18.  *@param serviceName 本條keychains所屬的服務(組) 
  19.  *return BOOL 是否儲存成功 
  20.  */  
  21. + (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;    
  22.    
  23. /** 
  24.  * 刪除某個使用者資訊 
  25.  *param username 使用者名稱 
  26.  *param serviceName 使用者所屬的服務(組) 
  27.  *return BOOL 是否刪除成功 
  28.  */  
  29. + (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;    
  30.    
  31. @end  

 

 

使用方法:

 

[objc] view plaincopy
    1. #define ServiceName @"com.mycompany.yourAppServiceName"    
    2.    
    3. NSError *error;  
    4. NSString *userName = @"<使用者名稱>";  
    5. NSString *password = @"<使用者密碼>";    
    6.    
    7. /** 儲存使用者的密碼*/  
    8. BOOL saved = [SFHFKeychainUtils storeUsername:userName  
    9.                                   andPassword:password  
    10.                                forServiceName:ServiceName  
    11.                                updateExisting:YES  
    12.                                      error:&error ];  
    13. if (!saved) {  
    14.     NSLog(@"儲存密碼時出錯:%@", error);  
    15. }    
    16.    
    17. error = nil;  

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.