android sqlite加密数据库,Android Sqlite数据库加密

android sqlite加密数据库,Android Sqlite数据库加密Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个:1.对几个关键的字段使用加密算法,再存入数据库2.对整个数据库进行加密SQLite数据库加密工具:收费工具:免费工具:SQLCipher使用:SQLCipher是完全开源的软件,提供256-bitAES加密源码编译:1.OpenSSL编译SQLCipher源码编译需要依赖OpenSSL提供的libcry…

大家好,又见面了,我是你们的朋友全栈君。

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添加到工程:

20180920231000912214.png

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

20180920231001227624.png

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145816.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新版百度地图开发版SHA1值和发布版SHA1值的获取「建议收藏」

    新版百度地图开发版SHA1值和发布版SHA1值的获取「建议收藏」新版的百度开发者中心申请appkey的时候,增加了发布版SHA1值,开发版一般是默认的debug签名,和发布版正式签名的生成apk文件的sha1值是不同的,下面详细说明怎么分别获取开发版和发布版SHA1值。首先,开发版SHA1值(也就是debug签名的SHA1值)的获取方法百度开发者中心文档说的很清楚,在此也根据官网说明列出来以方便查看。方法一:打开Eclipse在Eclipse–>wi

    2022年8月11日
    5
  • Java中char,short,int,long占几个字节和多少位[通俗易懂]

    Java中char,short,int,long占几个字节和多少位[通俗易懂]1.字节:byte:用来计量存储容量的一种计量单位;位:bit2.一个字节等于8位1byte=8bitchar占用的是2个字节16位,所以一个char类型的可以存储一个汉字。整型:byte:1个字节8位-128~127short:2个字节16位int:4个字节32位long:8个字节64位浮点型:float:4个字节32位doub……

    2022年8月15日
    3
  • 用户使用报告_2020年抖音用户画像报告[附下载] | 行业数据报告研读[通俗易懂]

    用户使用报告_2020年抖音用户画像报告[附下载] | 行业数据报告研读[通俗易懂]▼ 更多专业报告,请关注我们 ▼▼有趣回顾:▼【小时光面馆】专一先生和善变小姐油烟情书甲壳虫的最后一英里关注公众号,后台发送关键词“2020抖音用户画像”即可获取完整版PDF报告!报告摘要本篇报告针对的是18岁以上使用抖音行为的人群,对此进行规模大小、具体属性分析、兴趣爱好的数据整理,大部分数据都采自2020年1月。抖音用户规模数据截止至2020年1月,抖音日…

    2022年6月12日
    35
  • zuul网关集成swagger

    zuul网关集成swaggerswagger2是一个API文档生成工具,在微服务的架构中,一般会使用zuul作为api网关,适合用来集成swagger生成所有微服务的接口文档。(springboot版本1.5.9)zuul服务添加依赖springfox-swagger2是用于生成接口文档的,必须要依赖springfox-swagger-ui负责提供ui查询界面,这里因为是在zuul集成,所以只需要z…

    2022年8月15日
    3
  • 超过响应缓冲区限制[通俗易懂]

    超过响应缓冲区限制[通俗易懂]Response对象错误'ASP0251:80004005'超过响应缓冲区限制/his/zygl/jzgl_left.asp,行0此ASP页的运行造成响应缓冲区超过其

    2022年7月2日
    40
  • cglib动态代理实现原理_jdk cglib 动态代理 区别

    cglib动态代理实现原理_jdk cglib 动态代理 区别cglib动态代理详解我们都知道jdk的动态代理内部调用切面无效的问题,而cglib则不会出现这种情况,这是为什么?cglib就一定不会出现内部调用切面无效的问题吗?cglib针对每一个类只创建了一个代理类吗?为什么cglib的效率要比jdk的动态代理低呢?首先我们看一下通常我们是如何使用cglib增强一个类的publicclassMain{staticclassTest{publicvoidtest(){System.out.pr

    2022年10月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号