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

Другие вопросы по тегам