如何在使用SQLiteOpenHelper时实现SQLCipher

时间:2013-07-19 19:46:03

标签: android sqlite android-sqlite

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

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

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

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

我觉得我差不多了,我只需要最后的努力去解决这个问题:P 提前谢谢!

2 个答案:

答案 0 :(得分:18)

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

正常的sql实现正常。

我应该在哪里定义密码?

如果您使用的是SQLiteHelper,它会在您第一次得到数据库时创建数据库:

helper.getWriteableDatabase("myPassword");

在第一次调用时,它将使用此密码创建数据库。在upcoing调用它只能使用此密码。

(当我去Source:https://github.com/sqlcipher/android-database-sqlcipher/blob/master/src/net/sqlcipher/database/SQLiteOpenHelper.java时想出来,检查方法getWriteableDatabase(String pw)  那里! )

我应该在哪里使用loadLibs(上下文)?

在您第一次致电 helper.getWriteableDatabase("myPassword"); 之前!

答案 1 :(得分:3)

  

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

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

  

我应该在哪里定义密码?

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

  

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

每个过程一次就足够了(事实上,更多可能是一个问题)。如果您使用ContentProvider作为SQLCipher数据库,请致电loadLibs() onCreate()中的ContentProvider。如果您使用的是自定义Application,请在loadLibs()的{​​{1}}中致电onCreate()