如何 encrypt/decrypt 我的 CoreData(sqlite)?我可以使用 SQLCipher 吗?

How to encrypt/decrypt my CoreData(sqlite)? Can I use SQLCipher for it?

  1. 如果我想保护我的应用程序的数据库,我可以做什么?
  2. 使用 SQLCipher 我需要知道什么?

对用户数据实施附加保护是一个非常好的主意,尤其是当应用程序处理用户的财务信息、安全笔记、密码时,e.t.c。默认情况下,数据库未加密。它唯一的保护形式是它与其他应用程序隔离开来。

为此,您可以使用以下方法之一:

  • 使用 NSFileProtectionKey
    • 如果用户丢失 phone。
    • ,此方法有助于防止数据被访问
    • NSDictionary *storeOptions = @{ NSPersistentStoreFileProtectionKey : NSFileProtectionComplete };
    • [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeURL] options:storeOptions error:&error])
    • NSFileProtectionComplete - 文件以加密格式存储在磁盘上,在设备锁定或启动时无法读取或写入。
    • 如果未设置密码或攻击者可以通过物理访问解锁设备,则可以在设备越狱时访问数据库文件及其内容。
    • 有用的链接
  • 可变形属性
    • 如果您需要使用多个加密密钥或仅加密某些属性,此选项就足够了。 Details here.
  • SQLCipher
    • 如果需要加密整个数据库的文件,您可以使用SQLCipher。它是 SQLite 的开源扩展,提供透明的 256 位 AES 加密。
    • 你应该被警告几件事:
      • 性能略有下降 -- SQLCipher 声称数据库开销约为 5-15% I/O。
      • 更大的应用程序大小,如果使用 SQLite -- 您必须嵌入 SQLCipher 的副本,而不是使用系统内置的 SQLite 库。
      • 在某些情况下,您可能需要获得 ERN(BIS 的加密注册批准)
    • 要安装 SQLCipher,你可以阅读 zeletetic 的 official tutorial 的 just use a cocoapod
      • pod 'SQLCipher'
    • 要加密现有数据库,您需要使用sqlcipher_export()Example
    • SQLCipher 和 CoreData
      • CoreData 不能直接与 SQLCipher 一起使用,但是您可以使用这个 project 来达到这个目的