11

我试图通过在我已经存在且正在运行的 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 在此先感谢!

4

2 回答 2

18

在这种情况下我应该如何使用 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");

于 2013-11-01T12:58:29.123 回答
3

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

这是不可能抽象地回答的。您使用它的方式与使用 SQLite 的方式大致相同。

我应该在哪里定义密码?

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

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

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

于 2013-07-19T20:10:15.410 回答