第三方SSKeychain儲存使用者密碼

2021-07-09 18:45:58 字數 4098 閱讀 6397

udid(-[uidevice uniqueidentifier])在ios7.0被禁用,一般使用uuid來作為裝置的唯一標識

獲取到uuid後,如果用nsuserdefaults儲存,當程式被解除安裝後重灌時,再獲得的uuid和之前就不同了。

使用keychain儲存可以保證程式解除安裝重灌時,uuid不變。但當刷機或者公升級系統後,uuid還是會改變的。

測試發現:

程式一(test1):

nslog(@"--%@--", [uidevice currentdevice].identifierforvendor

.uuidstring);

//模擬器6 8.1: 547b1ae8-483d-4740-a668-ac600a6ea7f4

//解除安裝後重新執行: 547b1ae8-483d-4740-a668-ac600a6ea7f4

//模擬器6 9.2: 4572de5f-5e98-4c1a-a9fd-e32a12530469

程式二(test2):

nslog(@"--%@--", [uidevice currentdevice].identifierforvendor

.uuidstring);

//模擬器6 8.1: 547b1ae8-483d-4740-a668-ac600a6ea7f4

//解除安裝後重新執行: 547b1ae8-483d-4740-a668-ac600a6ea7f4

//模擬器6 9.2: 4572de5f-5e98-4c1a-a9fd-e32a12530469

keychain的主要功能就是幫助使用者安全地記住他的密碼,keychain儲存的密碼檔案都是經過加密的,其它人不能直接通過開啟keychain的檔案獲得儲存在keychain中的密碼.

鑰匙鏈是乙個加密的容器,它儲存了多個程式和安全服務的密碼。鑰匙鏈是乙個安全的儲存容器,這意味著沒有應用程式或服務在它鎖住的情況下,可以訪問它的內容。在mac os x下,使用者可以解鎖鑰匙鏈,因此可以通過輸入主密碼的形式提供給信任的應用程式訪問裡面的內容。在ios中,每個應用程式只能訪問自己的鑰匙鏈項;使用者不能解鎖鑰匙鏈。相反在mac os x裡,使用者給予了許可,每個應用程式都能訪問任何乙個鑰匙鏈項。在ios裡,乙個應用程式只能訪問自己的鑰匙鏈項。

注意:在iphone中,鑰匙鏈依賴於 provisioning profile 檔案來標識你的應用程式。確保應用程式在不同版本中一貫的使用同乙個 provisioning profile 檔案

在ios裡,有乙個單獨的鑰匙鏈**用程式訪問。儘管他儲存了系統裡全部應用程式的鑰匙鏈項,乙個應用程式只能並且僅能訪問它自己的鑰匙鏈項(包括因為應用程式建立包含了乙個持久的引用二引發的可能的鑰匙鏈項異常)

structure of a keychain

each keychain can contain any number of keychain items. each keychain item contains data plus a set of attributes. for a keychain item that needs protection, such as a password or private key (a string of bytes used to encrypt or decrypt data), the data is encrypted and protected by the keychain. for keychain items that do not need protection, such as certificates, the data is not encrypted.

鑰匙鏈結構

每乙個鑰匙鏈可以包含任意數量的鑰匙鏈項。每個鑰匙鏈項包含資料加上一些屬性集。對乙個鑰匙鏈項來說需要進行保護,比如像乙個密碼或這個私有鍵(加密或者揭秘的二進位制資料字串),資料被鑰匙鏈加密和保護。對多個鑰匙鏈項來說不需要保護,比如像證書,它的資料是不加密的。

在ios中,僅給乙個用程式訪問它自己的鑰匙項許可權。

the ios keychain services api uses a different paradigm. this api has a single function (secitemadd) for adding an item to a keychain.

在ios鑰匙鏈服務api使用了乙個不同的正規化(相對於mac os x)。這個api有乙個單獨的函式(secitemadd)來新增乙個鑰匙鏈項。

在ios中,你呼叫secitemcopymatching函式來查詢你應用程式自己的鑰匙鏈專案。在這種情況下,僅有乙個鑰匙鏈並且使用者不需要被提示來解鎖它(相對於mac os x)。

ios鑰匙鏈服務搜尋字典

在ios,鑰匙鏈服務使用鍵值對字典方式來制定鑰匙鏈項的屬性,這樣你就能查詢或者建立。

經典的搜尋字典組成:

class key:用來指定要搜尋的鑰匙鏈項的型別(比如,網際網路密碼 或者密碼金鑰)。

乙個或多個鍵值對來指定匹配屬性資料(比如標籤或者建立日期)

乙個或多個搜尋鍵值對,用來指定值來精確搜尋,比如發行證書或者郵件位址來匹配。

乙個返回值鍵值對,來指定你想要的資料(比如。乙個字典或者是乙個偏好引用)。

什麼樣的屬性值被指定,取決於你要搜尋的鑰匙鏈項的型別。舉例,如果你指定鍵位ksecclass的值為ksecclassgenericpassword,然後你可以指定建立時間的值或這個修改時間的值,但是不能指定主題或發行者(這個被用於證書)。

ksecreturndata鍵是函式返回鑰匙鏈項的資料,如果你想得到鍵值對的值,你需要使用ksecreturnattributes返回型別鍵並且值為kcfbooleantrue.

方法一: 手動新增

在工程中加入security.framework框架。

sskeychain.hsskeychain.m加到專案資料夾。

方法二: 使用第三方管理工具

pod 'sskeychain', '~> 1.3.1'

sskeychain使用起來非常的簡單, 方法也不多

//獲取所有賬號

+ (nsarray *)allaccounts;

//獲取某個服務下的所有賬號

+ (nsarray *)accountsforservice:(nsstring *)servicename;

//設定特定服務下的給定賬號的密碼

+ (bool)setpassword:(nsstring *)password forservice:(nsstring *)servicename account:(nsstring *)account;

//獲取某個服務下的某個賬號的密碼

+ (nsstring *)passwordforservice:(nsstring *)servicename account:(nsstring *)account;

//刪除某個服務下的某個賬號的密碼

+ (bool)deletepasswordforservice:(nsstring *)servicename account:(nsstring *)account;

注意:

以上方法中的servicenameaccount引數應該是一致的這樣才能保證真確的操作, 建議使用巨集定義或者static nsstring *kservicename = @"servicename";

如果你儲存密碼失敗,處理方法:

nserror *error = nil;  

nsstring *password = [sskeychain passwordforservice:@"自定義的伺服器名" account:@"賬號"

error:&error];

if ([error code] == sskeychainerrornotfound)

參考文件:

1. 2.

4.

第三方登入

我的應用就可以通過token第三方應用獲取一些基本資訊了,我的應用在獲取到這些基本資訊之後,就可以在我的應用中建立乙個賬號了。下次使用地方登入獲取到的這些使用者資訊,就可以直接用來登入我的應用了。為什麼先返回code呢?這個返回的code只能夠使用一次。這個code是從qq的伺服器返回給 時,我們時...

第三方註冊

第三方註冊 一些as hss建立如下表中的 ifc過濾規則,當終端在 s cscf 上註冊成功後,s cscf 從hss ifc過濾規則 s cscf 檢測所有過濾規則,發現 中的規則要求 ue ims.test 這個終端發出初始註冊訊息後,需要 到 sip as.ims.test 應用伺服器,之後...

第三方登入

分類 android 2014 03 26 10 24 329人閱讀收藏 舉報 android android開發 第三方登入 名詞說明 access toekn 授權成功後返回的token,用於呼叫第三方api 第三方登入的主要作用 1 使用第三方賬號資訊來初始化自己的賬號 暱稱 頭像等資訊 第三...