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

时间:2016-05-29 15:27:29

标签: ios sqlite core-data encryption sqlcipher

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

1 个答案:

答案 0 :(得分:9)

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

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

  • 使用NSFileProtectionKey
    • 如果用户丢失手机,此方法有助于防止数据被访问。
    • 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声称数据库I / O的开销约为5-15%。
      • 更大的应用程序大小,如果使用SQLite - 您必须嵌入SQLCipher的副本,而不是使用系统的内置SQLite库。
      • 您可能需要获得ERN(BIS的加密注册批准)
    • 要安装SQLCipher,您可以阅读仅使用cocoapod的zeletetic official tutorial
      • pod 'SQLCipher'
    • 要加密现有数据库,您需要使用sqlcipher_export()Example
    • SQLCipher和CoreData
      • CoreData不直接使用SQLCipher,但您可以将此project用于此目的