iOS keychain

這些都是轉(zhuǎn)載的!


iOS的keychain服務(wù)提供了一種安全的保存私密信息(密碼,序列號(hào)哀墓,證書等)的方式,每個(gè)ios程序都有一個(gè)獨(dú)立的keychain存儲(chǔ)喷兼。

相對(duì)于NSUserDefaults篮绰、文件保存等一般方式,keychain保存更為安全季惯,而且keychain里保存的信息不會(huì)因App被刪除而丟失吠各,所以在重裝App后,keychain里的數(shù)據(jù)還能使用荧呐。從ios 3.0開始骆捧,跨程序分享keychain變得可行岩睁。

如何需要在應(yīng)用里使用使用keyChain,我們需要導(dǎo)入Security.framework 纵散,keychain的操作接口聲明在頭文件SecItem.h里。

直接使用SecItem.h里方法操作keychain,需要寫的代碼較為復(fù)雜伍掀,為減輕咱們程序員的開發(fā)掰茶,我們可以使用一些已經(jīng)封裝好了的工具類,下面我會(huì)簡(jiǎn)單介紹下我用過的兩個(gè)工具類:KeychainItemWrapper和SFHFKeychainUtils蜜笤。

KeychainItemWrapper?

KeychainItemWrapper是apple官方例子“GenericKeychain”里一個(gè)訪問keychain常用操作的封裝類濒蒋,在官網(wǎng)上下載了GenericKeychain項(xiàng)目后,只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷貝到我們項(xiàng)目把兔,并導(dǎo)入Security.framework 沪伙。KeychainItemWrapper的用法:

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];

//保存帳號(hào)

[wrapper setObject:@"<帳號(hào)>" forKey:(id)kSecAttrAccount];

//保存密碼

[wrapper setObject:@"<帳號(hào)密碼>" forKey:(id)kSecValueData];

//從keychain里取出帳號(hào)密碼

NSString *password = [wrapper objectForKey:(id)kSecValueData];

//清空設(shè)置

[wrapper resetKeychainItem];

其中方法“- (void)setObject:(id)inObject forKey:(id)key;”里參數(shù)“forKey”的值應(yīng)該是Security.framework 里頭文件“SecItem.h”里定義好的key,用其他字符串做key程序會(huì)崩潰垛贤!

SFHFKeychainUtils 

SFHFKeychainUtils是另一個(gè)封裝了KeyChain簡(jiǎn)單操作的第三方類庫焰坪,使用上比KeychainItemWrapper要簡(jiǎn)單點(diǎn),SFHFKeychainUtils只提供了獲取聘惦、保存和刪除三個(gè)方法:

#import

@interface SFHFKeychainUtils : NSObject {

}

/** 從Keychain里獲取用戶密碼

*param username 用戶名

*param serviceName 服務(wù)名

*return NSString 用戶名對(duì)應(yīng)的密碼

*/

+ (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;

/**

*把用戶的密碼保存到Keychain里

*@param username 用戶名

*@param password 要保存的密碼

*@param serviceName 本條keychains所屬的服務(wù)(組)

*return BOOL 是否存儲(chǔ)成功

*/

+ (BOOL) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;

/**

* 刪除某個(gè)用戶信息

*param username 用戶名

*param serviceName 用戶所屬的服務(wù)(組)

*return BOOL 是否刪除成功

*/

+ (BOOL) deleteItemForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;

@end

使用方法:

#define ServiceName @"com.mycompany.yourAppServiceName"

NSError *error;

NSString *userName = @"<用戶名>";

NSString *password = @"<用戶密碼>";

/** 保存用戶的密碼*/

BOOL saved = [SFHFKeychainUtils storeUsername:userName

andPassword:password

forServiceName:ServiceName

updateExisting:YES

error:&error ];

if (!saved) {

NSLog(@"保存密碼時(shí)出錯(cuò):%@", error);

}

error = nil;

NSString *thePassword = [SFHFKeychainUtils getPasswordForUsername:userName

andServiceName:ServiceName

error:&error];

if(error){

NSLog(@"從Keychain里獲取密碼出錯(cuò):%@", error);

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末某饰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子善绎,更是在濱河造成了極大的恐慌黔漂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禀酱,死亡現(xiàn)場(chǎng)離奇詭異炬守,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剂跟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門减途,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曹洽,你說我怎么就攤上這事鳍置。” “怎么了送淆?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵税产,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我偷崩,道長(zhǎng)辟拷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任阐斜,我火速辦了婚禮衫冻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谒出。我一直安慰自己羽杰,他們只是感情好渡紫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著考赛,像睡著了一般惕澎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颜骤,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天唧喉,我揣著相機(jī)與錄音,去河邊找鬼忍抽。 笑死八孝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸠项。 我是一名探鬼主播干跛,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼祟绊!你這毒婦竟也來了楼入?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤牧抽,失蹤者是張志新(化名)和其女友劉穎嘉熊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扬舒,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阐肤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讲坎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孕惜。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晨炕,靈堂內(nèi)的尸體忽然破棺而出衫画,到底是詐尸還是另有隱情,我是刑警寧澤府瞄,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布碧磅,位于F島的核電站碘箍,受9級(jí)特大地震影響遵馆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丰榴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一货邓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧四濒,春花似錦换况、人聲如沸职辨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舒裤。三九已至,卻和暖如春觉吭,著一層夾襖步出監(jiān)牢的瞬間腾供,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工鲜滩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伴鳖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓徙硅,卻偏偏與公主長(zhǎng)得像榜聂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗓蘑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • iOS的keychain服務(wù)提供了一種安全的保存私密信息(密碼须肆,序列號(hào),證書等)的方式脐往,每個(gè)ios程序都有一個(gè)獨(dú)立...
    灰斗兒閱讀 1,118評(píng)論 1 0
  • iOS中使用SFHFKeychainUtils保存用戶密碼休吠,有需要的朋友可以參考下。項(xiàng)目中需要保存用戶密碼业簿,以實(shí)現(xiàn)...
    全力以赴打醬油閱讀 4,374評(píng)論 2 5
  • 概要 iOS中一般用Keychain存儲(chǔ)密碼瘤礁、私鑰等需要加密的數(shù)據(jù)。參考apple 官網(wǎng)介紹 使用方法 先總的說下...
    NapoleonY閱讀 5,506評(píng)論 1 14
  • 1梅尤、KeyChain是什么柜思? KeyChain的作用:可將用戶信息加密存儲(chǔ)在鑰匙串中,保證用戶信息的安全性巷燥;另外多...
    Jaly_xxx閱讀 4,119評(píng)論 3 1
  • 時(shí)間穿越到六年前赡盘,也就是小學(xué)六年級(jí),記得比較清楚的也就是這一年了缰揪,之前的事情也忘得差不多了陨享,畢竟那時(shí)候我還小嘛,情...
    你是我的豆豆么閱讀 430評(píng)論 0 0