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