SQLCipher 和 DBFlow

far*_*ukh 5 sqlcipher dbflow

我曾与 DBFlow 一起工作,它在数据库方面很简单,但我想问一下是否有一个很好的例子可以将 SQLCipher 与 DBFlow 一起使用

我已遵循此链接寻求帮助

Raizlabs/DBFlow

但是如果有人能提供一些简单的例子,将会非常有助于通过简单的步骤创建安全的数据库应用程序。

小智 5

ConductedClever 链接的使用文档看起来并不多,但这确实几乎是您所需要的。除了一些可以提及的细节:

我必须将 @aar 添加到 build.gradle 中的 dbflow-cipher 依赖项,以使其首先通过 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"
}
Run Code Online (Sandbox Code Playgroud)

根据需要更改密码密钥:

// SQLCipherHelperImpl.java
public class SQLCipherHelperImpl extends SQLCipherOpenHelper {

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

  @Override
  protected String getCipherSecret() {
    return "your-cipher-secret";
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您遵循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());
  }
}
Run Code Online (Sandbox Code Playgroud)

导出您的数据库并尝试在 SQLite 客户端中打开它。这现在应该会失败,因为加密。


Con*_*ver 0

我还没有尝试过,但这是官方开发人员提供的有关使用 SQLcipher 的使用文档:

SQL 密码和 DBFlow