數(shù)據(jù)保護(hù) API

文件系統(tǒng)中的文件、keychain 中的項(xiàng),都是加密存儲(chǔ)的。當(dāng)用戶解鎖設(shè)備后,系統(tǒng)通過(guò) UDID 密鑰和用戶設(shè)定的密碼生成一個(gè)用于解密的密碼密鑰,存放在內(nèi)存中,直到設(shè)備再次被鎖,開(kāi)發(fā)者可以通過(guò) Data Protection API 來(lái)設(shè)定文件系統(tǒng)中的文件、keychain 中的項(xiàng)應(yīng)該何時(shí)被解密。

文件保護(hù)

/* 為filePath文件設(shè)置保護(hù)等級(jí) */

NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete

forKey:NSFileProtectionKey];

[[NSFileManager defaultManager] setAttributes:attributes

ofItemAtPath:filePath

error:nil];

//文件保護(hù)等級(jí)屬性列表

NSFileProtectionNone? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //文件未受保護(hù),隨時(shí)可以訪問(wèn) (Default)

NSFileProtectionComplete? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //文件受到保護(hù),而且只有在設(shè)備未被鎖定時(shí)才可訪問(wèn)

NSFileProtectionCompleteUntilFirstUserAuthentication? ? //文件收到保護(hù),直到設(shè)備啟動(dòng)且用戶第一次輸入密碼

NSFileProtectionCompleteUnlessOpen? ? ? ? ? ? ? ? ? ? ? //文件受到保護(hù),而且只有在設(shè)備未被鎖定時(shí)才可打開(kāi),不過(guò)即便在設(shè)備被鎖定時(shí),已經(jīng)打開(kāi)的文件還是可以繼續(xù)使用和寫入

keychain 項(xiàng)保護(hù)

/* 設(shè)置keychain項(xiàng)保護(hù)等級(jí) */

NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrGeneric:@"MyItem",

(__bridge id)kSecAttrAccount:@"username",

(__bridge id)kSecValueData:@"password",

(__bridge id)kSecAttrService:[NSBundle mainBundle].bundleIdentifier,

(__bridge id)kSecAttrLabel:@"",

(__bridge id)kSecAttrDescription:@"",

(__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleWhenUnlocked};

OSStatus result = SecItemAdd((__bridge CFDictionaryRef)(query), NULL);

//keychain項(xiàng)保護(hù)等級(jí)列表

kSecAttrAccessibleWhenUnlocked? ? ? ? ? ? ? ? ? ? ? ? ? //keychain項(xiàng)受到保護(hù),只有在設(shè)備未被鎖定時(shí)才可以訪問(wèn)

kSecAttrAccessibleAfterFirstUnlock? ? ? ? ? ? ? ? ? ? ? //keychain項(xiàng)受到保護(hù),直到設(shè)備啟動(dòng)并且用戶第一次輸入密碼

kSecAttrAccessibleAlways? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //keychain未受保護(hù),任何時(shí)候都可以訪問(wèn) (Default)

kSecAttrAccessibleWhenUnlockedThisDeviceOnly? ? ? ? ? ? //keychain項(xiàng)受到保護(hù),只有在設(shè)備未被鎖定時(shí)才可以訪問(wèn),而且不可以轉(zhuǎn)移到其他設(shè)備

kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly? ? ? ? //keychain項(xiàng)受到保護(hù),直到設(shè)備啟動(dòng)并且用戶第一次輸入密碼,而且不可以轉(zhuǎn)移到其他設(shè)備

kSecAttrAccessibleAlwaysThisDeviceOnly? ? ? ? ? ? ? ? ? //keychain未受保護(hù),任何時(shí)候都可以訪問(wèn),但是不能轉(zhuǎn)移到其他設(shè)備

應(yīng)用實(shí)例

把一段信息 infoStrng 字符串寫進(jìn)文件,然后通過(guò) Data Protection API 設(shè)置保護(hù)。

設(shè)備鎖屏(帶密碼保護(hù))后,即使是越獄機(jī),在 root 權(quán)限下 cat 讀取那個(gè)文件信息也會(huì)被拒絕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注:原文---念茜的博客 題外話 開(kāi)篇先扯幾句題外話,許多朋友都問(wèn)我怎么不寫防啊,我確實(shí)有點(diǎn)猶豫。 hackers...
    richar_閱讀 449評(píng)論 0 0
  • 蘋果官方文檔地址 keychain保護(hù) /* 設(shè)置keychain項(xiàng)保護(hù)等級(jí) */ NSDictionary *q...
    GeniusLi閱讀 1,344評(píng)論 0 0
  • 本文首發(fā)個(gè)人博客:聊聊 iOS 數(shù)據(jù)保護(hù) 文件系統(tǒng)中的文件、keychain中的項(xiàng),都是加密存儲(chǔ)的。當(dāng)用戶解鎖設(shè)備...
    Chars閱讀 3,312評(píng)論 0 5
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 大道理人人都懂,小情緒卻難以自控。 作為一個(gè)直得像鋼筋,硬得跟混凝土一樣的大老爺們,每個(gè)月都有那么幾天情緒低落,食...
    不悟也空閱讀 494評(píng)論 6 1

友情鏈接更多精彩內(nèi)容