IOS在鑰匙串裡儲存APP的賬號密碼

2021-07-15 09:52:18 字數 4014 閱讀 9607

想在應用裡儲存帳號、密碼等資訊的話,直接存到 plist 裡顯然是不負責任的,自己折騰加密既麻煩又不能保證不被反編譯破解。實際上蘋果 ios 和 mac os x 系統自帶了一套敏感資訊儲存方案:"鑰匙串" (keychain)。

用原生的 security.framework 就可以實現鑰匙串的訪問、讀寫。但是只能在真機上進行,模擬器會出錯。在 github 上有個封裝的非常好的類來實現這個功能,讓你既能在模擬器又能在真機上訪問鑰匙串。

具體**:

//獲取密碼

+ (nsstring *) getpasswordforusername: (nsstring *) username andservicename: (nsstring *) servicename error: (nserror **) error;

//儲存密碼

+ (void) storeusername: (nsstring *) username andpassword: (nsstring *) password forservicename: (nsstring *) servicename updateexisting: (bool) updateexisting error: (nserror **) error;

//刪除密碼

+ (void) deleteitemforusername: (nsstring *) username andservicename: (nsstring *) servicename error: (nserror **) error;

直接使用

security框架讀寫鑰匙串,

參考:我們使用第三方類sfhfkeychainutils來操作鑰匙串 (  )

使用方法如下:

1、引入security.framework框架。

2、引入標頭檔案:#import"sfhfkeychainutils.h"

3、存密碼:

[cpp]view plain

copy

nsstring *service_name=@"demo";  

[sfhfkeychainutils storeusername:@"dd"

andpassword:@"aa"

forservicename:service_name  

updateexisting:1  

error:nil];  

4、取密碼:

[cpp]view plain

copy

nsstring *password =  [sfhfkeychainutils getpasswordforusername:@"dd"

andservicename:service_name  

error:nil];  

nslog(@"%@",password);  

5、刪除使用者:

[cpp]view plain

copy

[sfhfkeychainutils deleteitemforusername:@"dd" andservicename:service_name error:nil]; 

demo先行:

主要分為兩部分:

1.賦予應用對某個鑰匙串條目的訪問許可權。

2.寫入時配置鑰匙串條目,對ksecattraccessgroup的值進行設定。

1.新建乙個plist檔案,在plist中的陣列中新增可以訪問的條目的名字(如keychainaccessgroups.plist),結構如下:

2.在build-setting中進行配置,搜尋entitlement,注意路徑別配置錯:

鑰匙串的操作介面都位於security.framework框架下,它是乙個sqlite資料庫,位於/private/var/keychains/keychain-2.db,其儲存的所有資料都是加密過的。

其過程可以總結為:

1.配置查詢字典,格式是nsmutabledictionary,需要配置的內容下次再分析,功能就相當於寫一句sql一樣。

2.進行增(secitemadd)、刪(secitemdelete)、改(secitemupdate)、查(secitemcopymatching)。

**demo裡面有,這裡以增為例,下面有2個語句,乙個是增加到自身bundleid的鑰匙串條目,乙個是增加到共享的條目中。

//

建立乙個基本的查詢字典

+ (nsmutabledictionary *)getkeychainquery:(nsstring *)service

+ (void)addkeychaindata:(id)data forkey:(nsstring *)key

+(void)addsharekeychaindata:(id)data forkey:(nsstring *)key

函式  [keychainquery setobject:accessgroupitem forkey:(id)ksecattraccessgroup] 的配置,就是指定了這次寫入時的鑰匙串條目,不寫入時預設為plist配置檔案裡第乙個條目。

在查詢中,也可以對查詢的鑰匙串條目進行配置,缺省會對所有有許可權的條目進行搜尋。

三、keychain的組成:

參考部落格:

每乙個keychain的組成如圖,整體是乙個字典結構.

1.ksecclass key 定義屬於那一種型別的keychain

2.不同的型別包含不同的attributes,這些attributes定義了這個item的具體資訊

3.每個item可以包含乙個密碼項來儲存對應的密碼

對於最常用密碼型別,我們應該如下配置

ksecattraccessiblein變數用來指定這個應用合適需要訪問這個資料。我們需要對這個選項特別注意,並且使用最嚴格的選項。這個鍵(key)可以設定6種值。

四、安全

但是!!如果使用帶有乙個*萬用字元的entitlments,因此它能夠訪問keychain中的所有條目。。或者,如果用乙個包含所有訪問組(access group)的entitlements檔案,也能夠訪問所有的keychain資料。

但以上僅限模擬器,在真機除錯時,假如你plist裡的條目,和自己除錯檔案(pro file)的id不一致時(比如:ec0880a1.company),進行真機編譯的時候是會報錯的。

關於keychain還有很多值得挖掘的,比如具體在sqlite資料庫的表單儲存方式等,有錯歡迎指正。

在蘋果Mac上如何建立新的鑰匙串?

1.單擊位於桌面右上角的 放大鏡 圖示以訪問spotlight搜尋。2.在搜尋欄位中鍵入 keychain 然後從搜尋結果中開啟 keychain access 3.在選單欄中單擊 檔案 然後從下拉列表中選擇 新鑰匙串 如下所示。4.系統會提示您輸入新鑰匙串的密碼。如果使用者堅持更改登入鑰匙串的密碼...

在MyEclipes裡儲存自定義的jsp模板

在 myeclipse myeclipse eclipse plugins com.genuitec.eclipse.wizards 6.0.1.zmyeclipse601200710 templates jsp 目錄下找到jsp.vtl,複製乙份,重新命名為jsp2.vtl,然後把裡面的內容修改為...

使用七牛雲儲存解決ios7 1的app部署問題

一.問題描述 這裡不詳細描述https協議。https的信任繼承基於預先安裝在瀏覽器中的證書頒發機構 如verisign microsoft等 意即 我信任證書頒發機構告訴我應該信任的 因此,乙個到某 的https連線可被信任,當且僅當 1.使用者相信他們的瀏覽器正確實現了https且安裝了正確的證...