Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个:

1. 对几个关键的字段使用加密算法,再存入数据库

2. 对整个数据库进行加密

SQLite数据库加密工具:

收费工具:

免费工具:

SQLCipher使用:

SQLCipher是完全开源的软件,提供256-bit AES加密

源码编译:

1. OpenSSL编译

SQLCipher源码编译需要依赖OpenSSL提供的libcrypto

下载OpenSSL源码,这里选择稳定版本1.0.1h

 openssl-1.0.1h Admin$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl
openssl-1.0.1h Admin$ make
openssl-1.0.1h Admin$ make test
openssl-1.0.1h Admin$ make install

2. SQLCipher源码编译

下载地址:https://github.com/sqlcipher/sqlcipher

 sqlcipher Admin$ ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="/usr/local/lib/libcrypto.a"
sqlcipher Admin$ make

命令行使用:

1. 创建加密数据库

 $ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 -- ::
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA key = 'thisiskey';
sqlite> create table encrypted (id integer, name text);
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);
sqlite> .q

2. 打开加密数据库

 $ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 -- ::
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA key = 'thisiskey';
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);

3. 修改数据库密码

 sqlite> PRAGMA rekey = 'newkey';

4. 加密已有的数据库

 $ sqlcipher banklist.sqlite3
SQLCipher version 3.8.4.3 -- ::
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'thisiskey';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;

5. 解密数据库

 $ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 -- ::
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA key = 'thisiskey';
sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';
sqlite> SELECT sqlcipher_export('plaintext');
sqlite> DETACH DATABASE plaintext;

Android版本SQLCipher使用

android版本源码,编译需要依赖的东西很多,懒得去试了,可以直接下载已经编译好的binary,官网下载,或者这里为3.1.0版本

注:github上的binary为2.1.1,实际测试在Android 4.4 kitkat上无法使用,请从官网下载最新的3.1.0版本

1. 将解压后的libs和asserts添加到工程:

2. 将工程中原有的android.database.sqlite.*全部替换为net.sqlcipher.database.*,原先的android.database.Cursor可以保留

3. 在activity或者其他调用数据库的地方,注意要在使用数据库之前加上:

 SQLiteDatabase.loadLibs(this);

备注:使用SQLCipher命令行将原先的数据库加密之后,新数据库的version有可能为0,导致在SQLiteOpenHelper中会进入到onCreate()中,重建数据库。

解决方法,将数据库版本改回原先的版本:

 sqlite> PRAGMA user_version = ;

Android Sqlite数据库加密的更多相关文章

  1. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  2. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  3. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

  4. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  5. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  6. c# sqlite 数据库加密

    c# sqlite 数据库加密 2010-05-29 10:55 用了ADO.NET 2.0 SQLite Data Provider这样可以直接利用它来创建一个加密的sqlite数据库.有关c#代码 ...

  7. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  8. Android SQLite数据库使用

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一. ...

  9. android: SQLite 数据库的最佳实践

    6.5.1    使用事务 前面我们已经知道,SQLite 数据库是支持事务的,事务的特性可以保证让某一系列的操 作要么全部完成,要么一个都不会完成.那么在什么情况下才需要使用事务呢?想象以下场 景, ...

随机推荐

  1. jQuery动画连续触发、滞后反复执行解决办法

    jQuery中slideUp .slideDown.animate等动画运用时,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,其表现不雅. 则解决办法: 1 ...

  2. java读取大文件

    1  多线程 2  java内存映射读取大文件

  3. S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动

    目录:一. 说明 二. 驱动程序说明及问题 三. 案例一       四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...

  4. 初学mongodb笔记

    先下载下mongodb,这里官网下载,https://www.mongodb.com/download-center?jmp=nav,根据自己的系统选择下载, 然后解压一下:会有这个文件夹\mongo ...

  5. Visual Studio 2015 Update 2

    Visual Studio Community 2015(带Update2)(社区版,针对个人免费): 简体中文版 || SHA1:待更新 繁体中文版 || SHA1:待更新 英文版 || SHA1: ...

  6. z变换

    ---恢复内容开始--- z变换作用很大 将离散信号从时间域转到频率域 网址 ---恢复内容结束--- z变换作用很大 将离散信号从时间域转到频率域 网址 http://stackoverflow.c ...

  7. silverlight导出excel

    开发导出excel,首先需要添加项目引用. Microsoft.CSharp 这个是应用dynamic的前提. 在代码页,需要添加引用 using System.Runtime.InteropServ ...

  8. 记录Js

    1.对于js,没有系统的学习.有要经常的用到,每次都是百度查找,为了以后能查询. (1). $(function () { $('.restbtn').on("click", fu ...

  9. MySQL数据库4 - 查看数据表

    一. 查看表的基本结构 语法:DESCRIBE/DESC TABLE_NAME 查询结果含义: Field: 字段名 Type: 字段类型 Null: 是否可以为空 Key: 是否编制索引 defau ...

  10. 图表控件FlowChart.NET详细介绍及免费下载地址

    FlowChart.NET是一款专业的.NET平台下的流程图及图表控件,它可以运行在任何C#, VB.NET或Delphi.NET语言编写的软件中.能够帮助你创建工作流程图.对象层次和关系图.网络拓扑 ...