我需要使用SQLCipher来开发Android应用...我已经使用SQLite制作了我的应用程序,现在只想将其转换为SQLCipher。
问题是,我对SQLCipher一无所知。
我在这个链接中阅读了有关它的信息: http://sqlcipher.net/sqlcipher-for-android/
但我还是不太清楚。
我想知道是否能提供一些基本的针对Android的SQLCipher教程,其中所有内容都是从绝对基础开始以简单易懂的方式讲解的。
谢谢!
我需要使用SQLCipher来开发Android应用...我已经使用SQLite制作了我的应用程序,现在只想将其转换为SQLCipher。
问题是,我对SQLCipher一无所知。
我在这个链接中阅读了有关它的信息: http://sqlcipher.net/sqlcipher-for-android/
但我还是不太清楚。
我想知道是否能提供一些基本的针对Android的SQLCipher教程,其中所有内容都是从绝对基础开始以简单易懂的方式讲解的。
谢谢!
为了在 Android 中正确使用 SQL Cipher,您需要使用外部库并更改与数据库交互的一些代码。
首先必须将它们添加到您的项目中(位于libs文件夹中)。请参考此处以获得这些内容:http://sqlcipher.net/sqlcipher-for-android/
其次,您需要将icudt4dl.zip文件添加到资产文件夹中,该Zip带有SQL Cipher库。
右键单击您的项目,转到属性,然后转到Java生成路径,然后包括类库,例如commons-codec.jar、guava-r09.jar、sqlcipher.jar。完成此操作后,请进行干净的构建。
然后在您的应用程序中,不要导入android.database.sqlite,而是导入net.sqlcipher.database
更改任何与DB交互的代码,例如:
SQLiteDatabase.loadLibs(context);
String dbPath = this.getDatabasePath("dbname.db").getPath();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,"dbPassword", null);
验证数据库是否已加密,转到Eclipse的DDMS透视图,单击文件浏览器选项卡,导航到data/data/,单击.db文件并选择获取设备文件,将其保存到桌面并使用文本编辑器打开。查找您一直在插入数据库中的明文值,如果仍然可以读取它们,则出了些问题。
在实施SQL Cipher之前,检查一下一些SQLite教程也是一个好主意。这里提到了一个很好的教程:Android sqlite database - where do i start as the tutorial has gone for notepad?
更新
此答案现已过时,Eclipse 在 Android 开发中几乎已经被淘汰。我最近必须在 Android Studio 中构建一个使用 SQLCipher 的应用程序,适用于 Android 5 + 6,以下是我遵循的步骤。
在 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文件夹和asset文件夹中的SQLCipher文件,但是删除后应用程序将按预期工作。一旦你进行了这些更改,请运行构建/清理并检查是否有效。
更改代码的同样步骤仍然适用。compile net.zetetic:android-database-sqlcipher:3.3.1-2@aar
,即可使用!此处 您可以始终检查最新的aar版本,在这里,您可以了解更多有关集成的内容。//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
}
没有真实世界的例子和文档,开始可能有些困难!这里有一个简单的 例子 和 文档。它非常简单、方便使用!
如果你喜欢这个例子,请别忘了点赞并在需要时做出贡献。谢谢!