Как реализовать SQLCipher при использовании SQLiteOpenHelper
Я пытаюсь защитить некоторые разумные данные, реализуя шифрование в моей уже существующей и функционирующей настройке базы данных в приложении android.
Я попытался следовать этому руководству (http://sqlcipher.net/sqlcipher-for-android/) и я просмотрел много foruns, включая группу google для шифрования. Однако я все еще не понимаю, как работает SQLCipher и как я должен адаптировать свой код для удовлетворения моих потребностей.
Я после этого реализация баз данных в android:http://www.vogella.com/articles/AndroidSQLite/#databasetutorial_database, что означает, что у меня есть расширение класса SQLiteOpenHelper и другого класса для хранения методов CRUD.
в этой ситуации, как я должен использовать SQLCipher? Где я должен определить пароль? Где я должен использовать loadLibs (контекст)? Только в основной деятельности? Или в каждом действии, которое обращается к базе данных?
Я чувствую, что я почти там, мне просто нужно последний толчок, чтобы понять это: P Заранее спасибо!
2 ответов
В этой ситуации, как я должен использовать SQLCipher?
точно так же, как обычная ваша обычная реализация sql.
где я должен определить пароль?
если вы используете SQLiteHelper, он создаст базу данных, когда вы впервые получите ее следующим образом:
helper.getWriteableDatabase("myPassword");
при первом вызове он создаст базу данных с этим паролем. На звонки upcoing это будет работать только с этим паролем.
(понял это, когда я пошел к источнику: https://github.com/sqlcipher/android-database-sqlcipher/blob/master/src/net/sqlcipher/database/SQLiteOpenHelper.java, проверка метода getWriteableDatabase (строка pw ) есть! )
где я должен использовать loadLibs (контекст)?
прямо перед вызовом helper.getWriteableDatabase("myPassword");
в первый раз!
в этой ситуации, как я должен использовать SQLCipher?
на это невозможно ответить абстрактно. Вы бы использовали его в основном так же, как вы используете SQLite.
где я должен определить пароль?
вы должны получить его от пользователя.
где я должен использовать loadLibs (контекст)? Только в основной деятельности? Или в каждом действии, которое база данных?
как только каждый процесс достаточен (на самом деле, больше может быть проблемой). Если вы используете ContentProvider
базы данных SQLCipher, вызов loadLibs()
на onCreate()
на ContentProvider
. Если вы используете пользовательский Application
, называют loadLibs()
на onCreate()
на Application
.