数据保护 API

文件系统中的文件、keychain 中的项,都是加密存储的。当用户解锁设备后,系统通过 UDID 密钥和用户设定的密码生成一个用于解密的密码密钥,存放在内存中,直到设备再次被锁,开发者可以通过 Data Protection API 来设定文件系统中的文件、keychain 中的项应该何时被解密。

文件保护

/* 为filePath文件设置保护等级 */

NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete

forKey:NSFileProtectionKey];

[[NSFileManager defaultManager] setAttributes:attributes

ofItemAtPath:filePath

error:nil];

//文件保护等级属性列表

NSFileProtectionNone                                    //文件未受保护,随时可以访问 (Default)

NSFileProtectionComplete                                //文件受到保护,而且只有在设备未被锁定时才可访问

NSFileProtectionCompleteUntilFirstUserAuthentication    //文件收到保护,直到设备启动且用户第一次输入密码

NSFileProtectionCompleteUnlessOpen                      //文件受到保护,而且只有在设备未被锁定时才可打开,不过即便在设备被锁定时,已经打开的文件还是可以继续使用和写入

keychain 项保护

/* 设置keychain项保护等级 */

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项保护等级列表

kSecAttrAccessibleWhenUnlocked                          //keychain项受到保护,只有在设备未被锁定时才可以访问

kSecAttrAccessibleAfterFirstUnlock                      //keychain项受到保护,直到设备启动并且用户第一次输入密码

kSecAttrAccessibleAlways                                //keychain未受保护,任何时候都可以访问 (Default)

kSecAttrAccessibleWhenUnlockedThisDeviceOnly            //keychain项受到保护,只有在设备未被锁定时才可以访问,而且不可以转移到其他设备

kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly        //keychain项受到保护,直到设备启动并且用户第一次输入密码,而且不可以转移到其他设备

kSecAttrAccessibleAlwaysThisDeviceOnly                  //keychain未受保护,任何时候都可以访问,但是不能转移到其他设备

应用实例

把一段信息 infoStrng 字符串写进文件,然后通过 Data Protection API 设置保护。

设备锁屏(带密码保护)后,即使是越狱机,在 root 权限下 cat 读取那个文件信息也会被拒绝。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 注:原文---念茜的博客 题外话 开篇先扯几句题外话,许多朋友都问我怎么不写防啊,我确实有点犹豫。 hackers...
    richar_阅读 442评论 0 0
  • 苹果官方文档地址 keychain保护 /* 设置keychain项保护等级 */ NSDictionary *q...
    GeniusLi阅读 1,334评论 0 0
  • 本文首发个人博客:聊聊 iOS 数据保护 文件系统中的文件、keychain中的项,都是加密存储的。当用户解锁设备...
    Chars阅读 3,281评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,364评论 19 139
  • 大道理人人都懂,小情绪却难以自控。 作为一个直得像钢筋,硬得跟混凝土一样的大老爷们,每个月都有那么几天情绪低落,食...
    不悟也空阅读 487评论 6 1

友情链接更多精彩内容