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

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

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

SQLite数据库加密工具:

收费工具:

免费工具:

SQLCipher使用:

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

源码编译:

1. OpenSSL编译

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

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

1 openssl-1.0.1h Admin$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl2 openssl-1.0.1h Admin$ make

3 openssl-1.0.1h Admin$ maketest4 openssl-1.0.1h Admin$ make install

2. SQLCipher源码编译

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

2 sqlcipher Admin$ make

命令行使用:

1. 创建加密数据库

1 $ sqlcipher encrypted.db2 SQLCipher version 3.8.4.3 2014-04-03 16:53:12

3 Enter ".help" forinstructions4 Enter SQL statements terminated with a ";"

5 sqlite> PRAGMA key = ‘thisiskey‘;6 sqlite> create table encrypted (idinteger, name text);7 sqlite>.schema8 CREATE TABLE encrypted (idinteger, name text);9 sqlite> .q

2. 打开加密数据库

1 $ sqlcipher encrypted.db2 SQLCipher version 3.8.4.3 2014-04-03 16:53:12

3 Enter ".help" forinstructions4 Enter SQL statements terminated with a ";"

5 sqlite> PRAGMA key = ‘thisiskey‘;6 sqlite>.schema7 CREATE TABLE encrypted (id integer, name text);

3. 修改数据库密码

1 sqlite> PRAGMA rekey = ‘newkey‘;

4. 加密已有的数据库

1 $ sqlcipher banklist.sqlite32 SQLCipher version 3.8.4.3 2014-04-03 16:53:12

3 Enter ".help" forinstructions4 Enter SQL statements terminated with a ";"

5 sqlite> ATTACH DATABASE ‘encrypted.db‘ AS encrypted KEY ‘thisiskey‘;6 sqlite> SELECT sqlcipher_export(‘encrypted‘);7 sqlite> DETACH DATABASE encrypted;

5. 解密数据库

1 $ sqlcipher encrypted.db2 SQLCipher version 3.8.4.3 2014-04-03 16:53:12

3 Enter ".help" forinstructions4 Enter SQL statements terminated with a ";"

5 sqlite> PRAGMA key = ‘thisiskey‘;6 sqlite> ATTACH DATABASE ‘plaintext.db‘ AS plaintext KEY ‘‘;7 sqlite> SELECT sqlcipher_export(‘plaintext‘);8 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或者其他调用数据库的地方,注意要在使用数据库之前加上:

1 SQLiteDatabase.loadLibs(this);

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

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

1 sqlite> PRAGMA user_version = 12;

原文:http://www.cnblogs.com/treecat-roboto/p/3873707.html

android sqlite加密数据库,Android Sqlite数据库加密相关推荐

  1. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  2. android模拟器的数据存放,Android模拟器在哪里存储SQLite数据库?

    Android模拟器在哪里存储SQLite数据库? 我正在开发一个将数据存储在SQLite数据库中的Android应用程序. 我的问题是,当您使用模拟器时,此数据库文件存储在文件系统中的哪个位置? 我 ...

  3. Android数据库 之 SQLite数据库

    一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于20 ...

  4. sqlite只能用于android系统,Android 数据库的使用 -- Sqlite

    Sqlite介绍 SQLite 是一款内置到移动设备上的轻量型的数据库,是遵守 ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式系统中. SQLite 数据库是无类型的, ...

  5. sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用

    在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库.通过一个例子来说明在Android ...

  6. Android内部自带的SQLite数据库操作dos命令

    1:什么叫做SQLite数据库 Android系统内核是Linux系统,Android系统很特殊,他自带了一个SQLite数据库,轻量型的一款嵌入式的数据库 它占用资源非常的低,在嵌入式设备中,可能只 ...

  7. android sqlite alert table,android sqlite数据库操作

    sqlite有一点不同于其他常见数据库,就是sqlite数据库是存成文件的,可以直接把该文件从手机里导出来,以文件的形式存在,然后放到电脑上查看. Android操作数据库有如下步骤: 1.继承SQL ...

  8. Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库

    最近项目需要通过电话号码查询归属地,决定直接在本地sqlite的数据库进行查询,没必要去访问网络(虽然最后还是决定还是将数据库放在服务器上 ) 一 首先先将外部的sqlite数据库放入assets文件 ...

  9. android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库

    本问题已经有最佳答案,请猛点这里访问. 在这里,我想使用我预先填充的SQLite数据库到我的Android应用程序. 因此,首次运行时,它会自动从assets文件夹中复制数据库,并在我的Android ...

最新文章

  1. (001) java后台开发之流程初识
  2. 正则不等于一个字符串_更正一个观念:“积食”不等于“吃多了”
  3. springboot映射服务器目录,Spring boot文件路径映射配置代码实例
  4. Android判断当前线程是否是主线程的方法
  5. 为什么 SQL 正在击败 NoSQL,这对未来的数据意味着什么?
  6. apachemod_wsgidjango部署多个项目
  7. lisp如何调用linux头文件,Lisp之 程序的交互执行和非交互执行
  8. Objective-C 2.0 with Cocoa Foundation---对象的初始化以及实例变量的作用域(1)
  9. spark读写hive数据
  10. TG Pro for Mac(Mac电脑硬件温度监测工具)
  11. AOJ2025 Eight Princes
  12. Android下的默认字体详解
  13. destoon task.js.php,Destoon B2B网站系统在线聊天插件 v1.0
  14. Docker容器下安装ubantu,其中 command not found 的问题(已经解决)
  15. XP Professional开机就要激活,否则无法登录桌面
  16. Chrome浏览器怎么安装插件
  17. 【牛客】前端工程师-HTML专项练习知识点整理(一)
  18. aso优化重要ASO优化技巧大全,ASO标题优化技巧:实战案例解析
  19. 宝塔服务器环境好不好_Windows系统使用宝塔面板安装什么环境好
  20. Windows下 Cppcheck 的使用教程

热门文章

  1. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题
  2. H.266/VVC代码学习32:VTM5.0解码端最上层函数
  3. android如何绑定事件,Android_安卓为按钮控件绑定事件的五种方式
  4. Marlon's String zoj3587
  5. x200换屏_小黑本“清凉一夏” — Thinkpad X200 拆解清理
  6. 【云服务架构】大健康之互联网医疗解决方案
  7. 顽固的计算机老师,电脑运行很慢 四招教你清除电脑系统里的那些“顽固垃圾”...
  8. 天谕搬砖哪个服务器稳定,天谕手游搬砖玩什么职业好 搬砖强势职业推荐
  9. 干货 !玩转Linux中的输入输出管理(1)
  10. 使用Prometheus监控web站点及证书过期