Как реализовать SQLCipher при использовании SQLiteOpenHelper

Я пытаюсь обеспечить некоторые разумные данные, внедряя шифрование в уже существующую и действующую базу данных в приложении Android.

Я попытался следовать этому руководству (http://sqlcipher.net/sqlcipher-for-android/), и я просмотрел множество foruns, включая группу google для Cipher. Тем не менее, я до сих пор не понимаю, как работает SQLCipher и как я должен адаптировать свой код для удовлетворения моих потребностей.

Я следую этой реализации баз данных в android: http://www.vogella.com/articles/AndroidSQLite/#databasetutorial_database, то есть у меня есть расширение класса SQLiteOpenHelper и другого класса для хранения методов CRUD.

В этой ситуации, как я должен использовать SQLCipher? Где я должен определить пароль? Где я должен использовать loadLibs (контекст)? Только в основной деятельности? Или в каждом действии, которое обращается к базе данных?

Я чувствую, что я почти там, мне просто нужен последний толчок, чтобы понять это: P Спасибо заранее!

Ответ 1

В этой ситуации, как я должен использовать SQLCipher?

Точно так же, как нормальная ваша нормальная реализация sql.

Где я должен определить пароль?

Если вы используете SQLiteHelper, он создаст базу данных, когда вы впервые получите ее следующим образом:

helper.getWriteableDatabase("myPassword");

При первом вызове он создаст базу данных с этим паролем. При последующих звонках он будет работать только с этим паролем.

(Я понял это, когда зашел в Source: https://github.com/sqlcipher/android-database-sqlcipher/blob/master/android-database-sqlcipher/src/main/java/net/sqlcipher/database/SQLiteOpenHelper.java, проверьте метод getWriteableDatabase (String pw) там!)

Где я должен использовать loadLibs (контекст)?

Прямо перед вызовом helper.getWriteableDatabase("myPassword"); первый раз!

Ответ 2

В этой ситуации как я должен использовать SQLCipher?

Это невозможно ответить абстрактно. Вы использовали бы его в основном так же, как вы используете SQLite.

Где я могу определить пароль?

Вы должны получить его от пользователя.

Где я должен использовать loadLibs (контекст)? Только в основной деятельности? Или в каждом действии, которое обращается к базе данных?

Как только один процесс достаточен (на самом деле, может быть, может быть и проблема). Если вы используете ContentProvider для своей базы данных SQLCipher, вызовите loadLibs() в onCreate() для ContentProvider. Если вы используете пользовательский Application, вызовите loadLibs() в onCreate() Application.