【问题标题】:iphone data securityiphone数据安全
【发布时间】:2010-11-06 14:08:18
【问题描述】:

我是 iPhone Dev 的新手,

我有一个包含大量安全重要数据的应用程序,经过多次搜索后我意识到 SQLite 是放入我的数据(大量)的最合适的方式, 但我发现有些人在谈论破坏受密码保护的 SQLite 文件, 我应该使用自定义搜索来创建自己的数据结构吗...或者有一种方法可以安全地使用 SQLite。

提前感谢;

编辑:如果我加密数据并在运行时解密它,我会丢失:

  • 使用 SQL 搜索
  • 性能

【问题讨论】:

  • SQLite 只是设备上的一个文件。如果要加密数据,请在将其放入数据库之前对其进行加密。
  • 对不起,我编辑了帖子以更清楚

标签: iphone security sqlite


【解决方案1】:

由于 SQLite 数据库只是 /Documents 文件夹中的一个文件 - 您可以在启动应用程序时解密它,并在退出时重新加密它。 iPhone 中已经内置了公钥和 AES 函数来执行此操作。

您可能还想使用用户输入的密码。

确保以原子/幂等方式执行此操作,以便在加密/解密/复制/移动/重命名过程中断时,您不会损坏文件!

【讨论】:

    【解决方案2】:

    您是否考虑过使用东京内阁?您可能可以通过存储二进制对象来完成一些事情。 (......只是一个想法。)

    【讨论】:

    【解决方案3】:

    看看http://sqlcipher.net/,它使用 AES(透明)在 SQLite 中存储数据 - 它应该足够强大,适合您的用例。

    其余的取决于你的情况:

    1) 系统是否离线? 您将无法进行安全的持久登录 - 每次应用程序进入前台时,用户都必须登录才能访问数据。

    2) 你的系统在线吗? 持久登录可能是可能的,因为当设备丢失时,可能会为用户/设备停用服务器端认证组件。只需在用户输入密码后提示服务器输入解锁令牌并使用此令牌来解锁数据库(具体实现由您决定,我会使用带有公钥/私钥的显式设备-服务器配对)...

    要记住的一个特殊情况是密码更改。可以使用将数据重新导入新的加密数据库来处理它。要点:

    您需要要求用户输入旧密码才能解锁当前数据库进行读取,然后使用新密码创建新密码,然后将旧数据导入新数据库。当这个过程完成后,只需删除旧数据库...

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多