Android中對sqlite加密--SQLCipher

android中有些時候會將一些隱私數據存放在sqlite數據庫中,在root過的手機中通過RE就能夠輕鬆的打開並查看數據庫所有內容,所以對隱私數據的保護就有兩個方法:①將隱私數據自行加密後存入數據庫,別人即使打開查看也不知道是什麼數據;②將整個數據庫進行加密,別人根本就打不開。對於一個數據庫中所有數據都需要加密的情況,直接對數據庫進行加密是很好的一個解決方案。

SQLCipher提供兩個版本,一個收費版,一個免費版。收費和免費的功能沒多大差別,只是收費的集成更簡單方便~這裏用免費版進行舉例:

SQLCipher For Android

1、下載 sqlcipher-for-android-community-v3.2.0.zip 

2、在android studio中新建 assets 文件夾,將下載的文件中assets文件夾中的icudt46l.zip文件拷貝到此處:


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();


操作完成記得關連接~



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章