缘由
我们都知道使用SQLite来存储数据却存在着一个安全问题,就如微信之前数据库也是没加密的,后来才进行了加密。大多数的Android手机都是Root过的,而Root过的手机都可以进入到/data/data/<package_name>/databases目录下面,在这里就可以查看到数据库中存储的所有数据。如果是一般的数据还好,但是当涉及到一些账号密码,或者聊天内容的时候,我们的程序就会面临严重的安全漏洞隐患。那么今天,就让我们一起研究一下如何借助SQLCipher来解决这个安全性问题。
SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,如果我们在项目中使用它来存储数据的话,就可以大大提高程序的安全性。SQLCipher支持很多种不同的平台,这里我们要学习的自然是Android中SQLCipher的用法了。
社区版集成
添加以下项进行dependencies到app/build.gradle文件:
1 | compile 'net.zetetic:android-database-sqlcipher:3.3.1@aar' |
商业版集成
本教程将介绍将Android的SQLCipher的二进制文件集成到现有的Android应用程序中。本教程假定开发人员具有用于Android商业二进制文件的最新SQLCipher。
我们需要将各种库文件复制到我们应用程序的根目录中。执行以下命令:
1 | % unzip sqlcipher-for-android-v3.3.1.zip |
最后,下面的添加到app/build.gradle该文件中的dependencies部分:
1 | compile fileTree(dir: 'libs', include: ['*.jar']) |
应用程序使用
接下来,我们将初始化SQLCipher,然后创建数据库文件插入记录。特别要注意的是导入包net.sqlcipher.database.SQLiteDatabase替代android.database.sqlite.SQLiteDatabase以及调用SQLiteDatabase.loadLibs(this)。请注意在其他任何数据库操作之前,先调用SQLiteDatabase.loadLibs(this)加载libs。
1 | package com.demo.sqlcipher; |
This’s all! Detail https://github.com/sqlcipher/android-database-sqlcipher。