21

我需要为 android 使用 SQLCipher ...我已经使用 SQLite 制作了我的应用程序,并且只想将其转换为 SQLCipher。

问题是,我对 SQLCipher 一无所知。

我在这个链接中读过它:http: //sqlcipher.net/sqlcipher-for-android/

但我不是太清楚,仍然。我想知道您是否可以为 android 教程提供一些基本的 sqlcipher,其中所有内容都以简单的方式从绝对基础开始教授。

谢谢!

4

3 回答 3

26

要正确使用适用于 Android 的 SQL Cipher,您必须使用外部库并更改一些与您的数据库交互的代码。

  1. 这些必须首先添加到您的项目中(在 libs 文件夹中。)请参阅此处以获取这些:http ://sqlcipher.net/sqlcipher-for-android/

  2. 其次,您需要将 icudt4dl.zip 文件添加到您的资产文件夹中,此 Zip 附带 SQL 密码库。

  3. 右键单击您的项目,转到属性,然后转到 Java 构建路径,然后包括 commons-codec.jar、guava-r09.jar、sqlcipher.jar 等库。完成后,进行构建清理。

  4. 然后在您的应用程序中,而不是导入 android.database.sqlite,您将导入 import net.sqlcipher.database

  5. 更改与数据库交互的任何代码,例如:

    SQLiteDatabase.loadLibs(context);

    String dbPath = this.getDatabasePath("dbname.db").getPath();

    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,"dbPassword", null);

  6. 验证数据库是否已加密,进入 Eclipse 中的 DDMS 透视图,单击文件资源管理器选项卡,导航到 data/data/,单击 .db 文件并选择获取设备文件,将其保存到桌面并用文本打开它编辑。查找您已插入数据库的纯文本值,如果您仍然可以读取它们,则说明出现问题。

在实现 SQL Cipher 之前查看一些 SQLite 教程可能也是一个好主意。这里提到了一个很好的: Android sqlite 数据库 - 当教程已经用于记事本时,我从哪里开始?

更新

这个答案现在已经过时了,Eclipse 实际上已被 Android 开发弃用。我最近不得不在适用于 Android 5 + 6 的 Android Studio 上使用 SQLCipher 构建一个应用程序,这些是我遵循的步骤。

在 Android Studio 中,您可以在构建文件中包含 SQLCipher 作为依赖项。更新 build gradle 中的依赖项以包含以下行:

dependencies{
    compile 'net.zetetic:android-database-sqlcipher:3.5.4@aar'
}

您可以在此处了解最新版本: https ://mvnrepository.com/artifact/net.zetetic/android-database-sqlcipher

除非我删除 lib 文件夹和资产文件夹中的 SQLCipher 文件,否则我的应用程序不会构建,但之后它按预期工作。进行这些更改后,运行构建/清理并检查它是否有效。

上面提到的更改代码的相同步骤仍然有效。

于 2014-04-26T14:07:38.043 回答
9

虽然您仍然可以按照Zetetic 的 Eclipse 教程并自己添加 .so 库,但您确实不需要在 Android Studio 中执行此操作。只需添加一个 Gradle 依赖项,compile net.zetetic:android-database-sqlcipher:3.3.1-2@aar就可以开始使用了!

在这里您可以随时查看最新的 aar 版本,在这里您可以阅读有关集成的更多信息。

于 2016-03-31T16:18:34.080 回答
0
//in build.gradle
implementation 'net.zetetic:android-database-sqlcipher:4.4.0@aar'
implementation "androidx.sqlite:sqlite:2.1.0"

 // in activity
 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // initialize sqlite libraries
        SQLiteDatabase.loadLibs(this)

        // initializing db
        val database = SQLiteDatabase.openOrCreateDatabase(
            "/some/path",
            "mypassword",
            null
        )

        // creating table if not exists
        database.execSQL("create table if not exists $DB_TABLE_NAME($DB_COLUMN1_NAME,  $DB_COLUMN2_SURNAME)")

        // get data from db
        s = loadFromDB()
    }




  private fun loadFromDb(): String {
        var s = ""
        var i = 0

        createTableIfNotExist()
        val cursor = database.rawQuery("select * from $DB_TABLE_NAME", null)
        cursor?.moveToFirst()
        if (!cursor.isAfterLast) {
            do {
                s += "col_${i++}: name:${cursor.getString(0)} surname:${cursor.getString(1)}\n"
            } while (cursor.moveToNext())

            cursor.close()
            return s
        }

        return s
    }

如果没有真实世界的示例和文档,入门有点困难!这是一个简单的示例文档。使用起来非常简单方便!

如果您喜欢该示例,请不要忘记加注星标和贡献)。谢谢!

于 2020-06-19T15:44:09.847 回答