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文件拷贝到此处:
[图片上传失败...(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();

操作完成记得关连接~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容