IOS数据保护API
2014-03-03 14:20
141 查看
数据保护API
文件系统中的文件、keychain中的项,都是加密存储的。当用户解锁设备后,系统通过UDID密钥和用户设定的密码生成一个用于解密的密码密钥,存放在内存中,直到设备再次被锁,开发者可以通过Data Protection API 来设定文件系统中的文件、keychain中的项应该何时被解密。1)文件保护
/* 为filePath文件设置保护等级 */
NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete
forKey:NSFileProtectionKey];
[[NSFileManager defaultManager] setAttributes:attributes
ofItemAtPath:filePath
error:nil];
//文件保护等级属性列表
NSFileProtectionNone //文件未受保护,随时可以访问 (Default)
NSFileProtectionComplete //文件受到保护,而且只有在设备未被锁定时才可访问
NSFileProtectionCompleteUntilFirstUserAuthentication //文件收到保护,直到设备启动且用户第一次输入密码
NSFileProtectionCompleteUnlessOpen //文件受到保护,而且只有在设备未被锁定时才可打开,不过即便在设备被锁定时,已经打开的文件还是可以继续使用和写入
2)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设置保护。NSString *documentsPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"DataProtect"];
[infoString writeToFile:filePath
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete
forKey:NSFileProtectionKey];
[[NSFileManager defaultManager] setAttributes:attributes
ofItemAtPath:filePath
error:nil];
设备锁屏(带密码保护)后,即使是越狱机,在root权限下cat读取那个文件信息也会被拒绝。
相关文章推荐
- iOS键盘中英文切换键盘高度获取通知方法
- ios开发官方例子地址
- iOS: 在键盘之上显示一个 View
- ios 音频技术
- 蓝牙4.0BLE之iBeacon 在ios上的应用-室内定位 [原创,多图,视频]
- SP CCIE系列视频-8-Yeslab安德IOS XR配置指导第五部ISIS协议
- iOS开发10种数据传值方法
- 百度地图 ios sdk的简单配置
- IOS中 ViewController中默认方法的执行顺序
- Cocoa Touch 入门记——《精通 iOS 开发》学习心得(1)
- iOS retain、strong、weak、assign
- iOS开发 内存使用陷阱
- iOS 下载图片前如何预取图片的大小
- Visual Studio 跨平台开发实战(3) - Xamarin iOS 多页面应用程式开发
- iOS实现简单图文混排效果
- Visual Studio 跨平台开发实战(2) - Xamarin.iOS 基本控制项介绍
- iOS苹果开发者客服电话地址
- iOS中TableView的自定义
- iOS项目的目录结构
- 动画ios