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