【问题标题】:opendatabase in SQLCipher taking time Android:SQLCipher 中的 opendatabase 需要时间 Android:
【发布时间】:2014-07-30 14:10:25
【问题描述】:

我正在使用 SQLCipher,它工作正常。这个openDatabase 方法有一个性能问题。我的代码是

SQLiteDatabase database = SQLiteDatabase.openDatabase(databasePath,
                databasePassword, null, SQLiteDatabase.OPEN_READWRITE);

这也可以正常工作。但我的问题是它需要 3 到 4 秒的时间(我发现 Logcat 的时间滞后)。因此,活动显示响应缓慢。

注意: 我在设置setContentView(R.layout._list); 后从onCreate 方法调用此代码

我做得对吗?有没有其他方法可以打开数据库。

onCreate调用openDatabase对吗?

【问题讨论】:

  • 您应该始终在后台线程上执行磁盘 I/O。除此之外,使用 Traceview 来准确确定您的时间都花在了哪里。
  • 我在 SQLiteDatabase 之前添加日志 database = SQLiteDatabase.openDatabase(databasePath, databasePassword, null, SQLiteDatabase.OPEN_READWRITE);在此之后。正是在这里,它需要 3 秒的时间。

标签: android sqlcipher


【解决方案1】:

您看到的性能问题很可能是由 SQLCipher 密钥派生引起的。 SQLCipher 打开数据库的性能故意变慢,使用 PBKDF2 执行密钥派生(即数千个 SHA1 操作)以防御暴力破解和字典攻击(您可以在http://sqlcipher.net/design 阅读更多相关信息)。此活动将推迟到第一次使用数据库。

【讨论】:

  • 所以。打开数据库时如何提高性能?
  • 最好的选择是缓存数据库连接,这样可以多次使用,而不必重复打开和键入数据库。将数据库视为单例;启动时只打开一次,因此后续访问不会触发密钥派生。如果这不起作用,您可以削弱密钥派生。 SQLCipher 在派生密钥时可以使用更少的 PBKDF2 轮次,以使数据库更快地打开。但是,从安全角度来看,它要弱得多,不推荐使用。有了这个警告,这是减少 KDF 迭代的方法:sqlcipher.net/sqlcipher-api/#kdf_iter
【解决方案2】:

我已经解决了我的问题。一旦我的应用程序打开,我就打开了我的数据库并保存(static 方法)从所有activities 中打开它。我不确定哪种方法是正确的。但它解决了我的问题。

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2016-10-21
    • 2014-07-29
    • 2021-12-29
    相关资源
    最近更新 更多