SQLCipher вместе с DBFlow

Я работал с DBFlow, с которым довольно просто поиграться с базой данных, но я хочу спросить, есть ли хороший пример использования SQLCipher с DBFlow.

Я перешел по этой ссылке за помощью

Raizlabs/DBFlow

Но если кто-то может предоставить простой пример, будет очень полезно создать безопасное приложение базы данных с помощью простых шагов.


person farrukh    schedule 21.06.2016    source источник
comment
Вы нашли какое-либо решение для шифрования базы данных DBFlow с помощью SQLCipher ??   -  person Anuj Zunjarrao    schedule 04.10.2016


Ответы (2)


Документ по использованию, связанный с ConductedClever, выглядит не очень, но это действительно почти все, что вам нужно. За исключением некоторых деталей, которые можно было бы упомянуть:

Мне пришлось добавить @aar к зависимости dbflow-cipher в build.gradle, чтобы в первую очередь пройти через gradle:

// build.gradle
def dbflow_version = "3.1.1"
def sqlcipher_version = "3.5.4"

dependencies {
  annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
  compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
  compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
  compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}@aar"
  compile "net.zetetic:android-database-sqlcipher:${sqlcipher_version}@aar"
}

Измените секрет шифра по своему усмотрению:

// SQLCipherHelperImpl.java
public class SQLCipherHelperImpl extends SQLCipherOpenHelper {

  public SQLCipherHelperImpl(DatabaseDefinition databaseDefinition, DatabaseHelperListener listener) {
    super(databaseDefinition, listener);
  }

  @Override
  protected String getCipherSecret() {
    return "your-cipher-secret";
  }
}

Если вы следовали руководству по началу работы с dbflow и ваша база данных называется AppDatabase, то это класс, который вы должны передать new DatabaseConfig.Builder(AppDatabase.class) при инициализации DBFlow:

// AppDatabase.java
@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {

  public static final String NAME = "AppDatabase";

  public static final int VERSION = 1;
}

// DatabaseApplication.java
public class DatabaseApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    FlowManager.init(new FlowConfig.Builder(this)
      .addDatabaseConfig(
        new DatabaseConfig.Builder(AppDatabase.class)
          .openHelper(new DatabaseConfig.OpenHelperCreator() {
            @Override
            public OpenHelper createHelper(DatabaseDefinition databaseDefinition, DatabaseHelperListener helperListener) {
              return new SQLCipherHelperImpl(databaseDefinition, helperListener);
            }
          })
          .build())
      .build());
  }
}

Экспортируйте свою базу данных и попробуйте открыть ее в клиенте SQLite. Это должно потерпеть неудачу сейчас из-за шифрования.

person Thomas    schedule 23.01.2017
comment
Спасибо, это работает, если я устанавливаю его как новое приложение, но когда я устанавливаю это приложение поверх старого приложения, которое не зашифровано, оно терпит неудачу. Ошибка: net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master; Не могли бы вы подсказать, как это исправить? - person Shailendra Madda; 22.04.2021
comment
@ShailendraMadda Мне пришлось удалить старый файл базы данных, чтобы исправить это. Прямо перед вызовом FlowManager.init(...) я получаю путь к файлу базы данных с помощью final File dbPath = getDatabasePath(AppDatabase.NAME + ".db"); и удаляю его с помощью boolean deleteSuccess = dbPath.delete();, если он существует. То же самое для временного файла базы данных final File dbPathTemp = getDatabasePath("temp-" + AppDatabase.NAME + ".db"); Это инкапсулировано в проверке версии приложения, чтобы удалить старую базу данных только в том случае, если установленная версия приложения старше той, которая ввела шифр scl. - person Thomas; 15.07.2021
comment
Спасибо за ответ проверю - person Shailendra Madda; 15.07.2021

Я еще не пробовал, но это документ по использованию, который официальный разработчик предоставляет для использования SQLcipher:

SQL Cipher и DBFlow

person ConductedClever    schedule 25.11.2016
comment
Ссылка, которую вы предоставили, мертва, пожалуйста, обновите ее. - person Shailendra Madda; 12.05.2021