我有一些信息,我想在iPhone应用程序上静态加密.我是iPhone开发的新手,有些我对CoreData以及它与视图的集成方式并不十分熟悉.我将数据作为JSON,但我可以轻松地将其放入SQLITE3数据库或任何其他支持数据格式.我将采取最简单的方法(a)加密和(b)与iPhone视图层集成.
每次启动应用程序时,用户都需要输入密码来解密数据.加密的目的是在用户丢失电话时防止数据被访问.
出于速度原因,我宁愿一次加密和解密整个文件,而不是加密数据库每一行中的每个字段.
注意:这是不一样的想法的问题929744,其目的是让用户从搞乱或看到的数据.使用时数据应完全透明.
另请注意:我愿意使用SQLCipher存储数据,但更愿意使用iPhone/CoreData框架上已有的东西,而不是经历冗长的构建/集成过程.
您可以通过加密它们在你的核心数据模型实体的各个属性转变的性质,然后创建一个子类NSValueTransformer将加密和解密数据,该属性.虽然这不是您正在寻找的全数据库解密,但它将比将整个数据库解密到内存中的内存占用更少.此外,它将允许懒惰地进行解密,而不是预先完成,因此您的应用程序将加载更快.根据所使用的加密,我甚至会期望用于加载每个实体的磁盘数据访问速度比属性的解密过程慢,因此在访问属性时您不会看到太多的性能损失.
像这样的可变形属性非常容易使用,因为您可以正常读取和写入它们,而加密/解密在幕后进行.
你需要加密吗?较新的iPhone(3Gs,4,iPad ......)加密设备上的所有数据.使用您的应用程序上的单个,哈希,盐渍密码,没有密码,任何人都无法访问数据.数据来自所有其他应用程序的沙箱.
iOS上的数据保护
我目前正在使用https://github.com/project-imas/encrypted-core-data加密我的coredata存储。它是NSIncrementalStore的自定义实现,基本上是Apple自己的具有加密选项的持久性存储的社区替代。这是一个有效的嵌入式解决方案。您还可以将sqlite文件取出,并使用在许多不同客户端中选择的任何密码对其进行解密。
该实现没有100%的覆盖率,并且不允许使用某些功能,例如子查询谓词。我应该将我的第一个PR提交给仓库,希望很快能有所改变;-)。我几乎可以用一个非常复杂的 coredata应用程序来完成它。它还具有允许您直接SQLite访问的附加优点,而不必担心Apple的实现会因您的完全更改而受到影响。