android中有些时候会将一些隐私数据存放在sqlite数据库中,在root过的手机中通过RE就能够轻松的打开并查看数据库所有内容,所以对隐私数据的保护就有两个方法:①将隐私数据自行加密后存入数据库,别人即使打开查看也不知道是什么数据;②将整个数据库进行加密,别人根本就打不开。对于一个数据库中所有数据都需要加密的情况,直接对数据库进行加密是很好的一个解决方案。
SQLCipher提供两个版本,一个收费版,一个免费版。收费和免费的功能没多大差别,只是收费的集成更简单方便~这里用免费版进行举例:
SQLCipher For Android
1、下载 sqlcipher-for-android-community-v3.2.0.zip
2、在android studio中新建 assets 文件夹,将下载的文件中assets文件夹中的icudt46l.zip文件拷贝到此处:
[图片上传失败…(image-bab20d-1514344679624)]
3、在 mian 目录下新建jniLibs文件夹,并将下载文件中libs文件夹中对应不同平台so文件的文件夹拷贝到此文件夹下;
4、将libs下的sqlcipher.jar文件拷贝到 项目的 libs 文件夹下(工程视图切换成project视图);
5、将 sqlcipher.jar “add as library”
6、建立 mySqliteOpenHelper 类,继承自导入jar包的 net.sqlcipher.database.SQLiteOpenHelper 类。
import android.content.Context;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
public class mySqliteOpenHelper extends SQLiteOpenHelper {
public mySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table Book(" +
"_id integer primary key autoincrement," +
"name text," +
"price integer)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
}
}
在操作数据库的类中如下操作:
SQLiteDatabase.loadLibs(this);//一定不要忘记这句~~
mySqliteOpenHelper helper = new mySqliteOpenHelper(this, "book.db", null, 1);
//此处指定打开数据库需要的password
db = helper.getWritableDatabase("pwd");
db.delete("Book",null,null);//清空数据库
ContentValues values = new ContentValues();
values.put("name", "JAVA编程思想");
values.put("price", 330);
db.insert("Book", null, values);
Cursor cursor = db.query("Book", null, null, null, null, null, null);
while (cursor.moveToNext()){
System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));
System.out.println("price:"+cursor.getString(cursor.getColumnIndex("price")));
}
cursor.close();
操作完成记得关连接~