【问题标题】:How to implement SQLCipher when using SQLiteOpenHelper使用 SQLiteOpenHelper 时如何实现 SQLCipher
【发布时间】:2013-07-19 19:46:02
【问题描述】:

我正在尝试通过在我的 Android 应用程序中已经存在且正常运行的数据库设置中实施加密来保护一些敏感数据。

我尝试遵循本教程 (http://sqlcipher.net/sqlcipher-for-android/) 并浏览了很多论坛,包括 Cipher 的 google 组。但是,我仍然不清楚 SQLCipher 是如何工作的,以及我应该如何调整我的代码以满足我的需求。

我正在关注 android 中数据库的这种实现:http://www.vogella.com/articles/AndroidSQLite/#databasetutorial_database,这意味着我有一个 SQLiteOpenHelper 类的扩展和另一个类来存储 CRUD 方法。

在这种情况下我应该如何使用 SQLCipher?我应该在哪里定义密码?我应该在哪里使用 loadLibs(context)?只在主要活动中?或者在每个访问数据库的活动中?

我觉得我快到了,我只需要最后的推动来解决这个问题:P 提前致谢!

【问题讨论】:

  • "我应该在哪里定义密码?" - 很好的问题,sqlcipher 助手创建了数据库,但似乎没有任何参数或任何密码。遇到同样的问题。

标签: android sqlite android-sqlite


【解决方案1】:

在这种情况下我应该如何使用 SQLCipher?

与普通的 sql 实现完全一样。

我应该在哪里定义密码?

如果你使用 SQLiteHelper,它会在你第一次得到它时创建数据库,如下所示:

helper.getWriteableDatabase("myPassword");

在第一次调用时,它将使用此密码创建数据库。在即将到来的呼叫中,它只能使用此密码。

(当我访问源时发现了这一点:https://github.com/sqlcipher/android-database-sqlcipher/blob/master/android-database-sqlcipher/src/main/java/net/sqlcipher/database/SQLiteOpenHelper.java,检查方法 getWriteableDatabase(String pw) 那里! )

我应该在哪里使用 loadLibs(context)?

就在你打电话之前helper.getWriteableDatabase("myPassword");第一次!

【讨论】:

  • 我们如何处理从普通内容提供者到加密内容提供者的应用程序升级(使用 SQLCipher)?当我尝试使用这些更改升级应用程序时,我的应用程序崩溃了。
【解决方案2】:

在这种情况下我应该如何使用 SQLCipher?

这是不可能在摘要中回答的。您可以像使用 SQLite 一样使用它。

我应该在哪里定义密码?

你应该从用户那里得到它。

我应该在哪里使用 loadLibs(context)?只在主要活动中?或者在每个访问数据库的活动中?

每个进程一次就足够了(事实上,可以想象更多可能是一个问题)。如果您对 SQLCipher 数据库使用 ContentProvider,请在 onCreate()ContentProvider 中调用 loadLibs()。如果您使用的是自定义Application,请在onCreate()Application 中调用loadLibs()

【讨论】:

  • "这不可能在摘要中回答。您使用它的方式与使用 SQLite 的方式大致相同。"我在问如何将它与 SQLiteOpenHelper 集成,而不是抽象的。但是谢谢你。
  • @JZweige:适用于 Android 的 SQLCipher 有自己的 SQLiteOpenHelper 替代品。您可以像使用标准 Android 中的 SQLiteOpenHelper 一样使用它。
  • 所以你是说我唯一需要做的就是替换导入并添加 loadLibs()?有趣的是尝试并做一些测试,我会看看它是怎么回事。
  • @JZweige:“所以你是说我唯一需要做的就是替换导入并添加 loadLibs()?” -- 您还需要从用户那里收集密码,并在调用getReadabaleDatabase()getWritableDatabase() 时使用该密码。否则,是的,它几乎是一个替代品。
  • @Kaps:“当我尝试使用这些更改升级应用程序时,我的应用程序崩溃了”——然后提出一个新的 Stack Overflow 问题,您可以在其中提供与崩溃相关的 Java 堆栈跟踪,以及产生该崩溃的 Java 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多