原文: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();

操作完成记得关连接~

Android中对sqlite加密--SQLCipher的更多相关文章

  1. Android中的SQLite使用学习

    Android中的SQLite使用学习 SQLite是非常流行的嵌入式关系型数据库,轻载, 速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是 ...

  2. Android中使用sqlite笔记

    1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...

  3. SQLite 加密 -- SQLCipher

    SQLite3 插件 github 下载地址 插件配置步骤地址 购买地址 其他加密方式介绍 SQLCipher API 地址 前言 应用使用 SQLite 来存储数据,很多时候需要对一部分的数据进行加 ...

  4. Android中数据库Sqlite的性能优化

    1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包括 ...

  5. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  6. android中滑动SQLite数据库分页加载

    今天用到了android中滑动SQlit数据库分页加载技术,写了个测试工程,将代码贴出来和大家交流一下: MainActivity package com.example.testscrollsqli ...

  7. android中的SQLite数据库

    SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...

  8. Android中操作SQLite数据库

    我又回到了安卓的学习当中,忙来忙去终于忙的差不多有时间做自己的事情了,这感觉实在是太棒了!!本来想写android的控件以及他们的监视器的,但是我查了查android的手册,基本上都能查到,但是查有些 ...

  9. Android 中 非对称(RSA)加密和对称(AES)加密

    在非对称加密中使用的主要算法有:RSA.Elgamal.背包算法.Rabin.D-H.ECC(椭圆曲线加密算法)等. 优点: 非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥, ...

随机推荐

  1. [tmux] Handle history in tmux sessions

    In this lesson, we'll look at how to manage your history between tmux sessions, and ensure that your ...

  2. js获取滚动条的宽度

    function getScrollWidth() { var noScroll, scroll, oDiv = document.createElement("DIV"); oD ...

  3. System.Xml.XmlException: 引用了未声明的实体“nbsp”

    在XML文件中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这些个字符时,应使用它们的转义序列,下面是5个在XML文件中预定义好的实体: ...

  4. 【p081】ISBN号码

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定 ...

  5. Request对象和Response对象详解

    Request 1.获取请求的基本信息 1>获取请求的url和uri 2>获取url后面的请求参数部分的字符串 3>获取请求方式 4>获取主机名,IP地址 5>获取 Co ...

  6. [Angular] Implementing a ControlValueAccessor

    So when you need to create a ControlValueAccessor? When you want to use a custom component as form c ...

  7. 详解PHP设置定时任务的实现方法

    详解PHP设置定时任务的实现方法 一.总结 一句话总结: 1.ignore_user_abort(true)是什么意思? 无论客户端是否关闭浏览器,下面的代码都将得到执行 2.set_time_lim ...

  8. 使用apidoc 生成Restful web Api文档

    在项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office工具,写一个文档,总也是不够漂亮和直观.好在git上的开源大神提供了生成文档的工具,so来介绍一下! 该工具是Nodejs的 ...

  9. 【b604】2K进制数

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 设r是个2K进制数,并满足以下条件: (1)r至少是个2位的2K进制数. (2)作为2K进制数,除最后一 ...

  10. scala 中的修饰符

    package cn.scala_base.oop.scalaclass import scala.beans.BeanProperty; /** * scala中的field,类中定义的是方法,函数 ...