Как реализовать 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
.