如何加密/解密我的CoreData(sqlite)?我可以使用SQLCipher吗?

Dim*_* L. 3 sqlite encryption core-data ios sqlcipher

  1. 如果我想保护我的应用程序数据库,我该怎么办?
  2. 使用SQLCipher需要了解什么?

Dim*_* L. 11

实现对用户数据的附加保护是一个非常好的主意,尤其是当应用程序处理用户的财务信息,安全注释,密码等时.默认情况下,数据库不加密.它唯一的保护形式是它是从其他应用程序沙箱.

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

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