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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AMCL是什么公司_论文技术参数是什么

    AMCL是什么公司_论文技术参数是什么整理内容来自:http://wiki.ros.org/amcl1、AMCL订阅的节点:scan(sensor_msgs/LaserScan):激光数据tf(tf/tfMessage):各种转

    2022年8月5日
    8
  • UCML应用框架平台的特点

    UCML应用框架平台的特点lUCML应用框架平台的特点1.UCML具有集成的、可编译的开发环境(1)该框架具有数据访问对象、业务对象、业务模版、工作流设计、业务规则设计、报表定义等组成部分,涵盖了一个业务系统开发所需的技术实现及细节;(2…

    2025年7月4日
    5
  • docker搭建kafka集群

    docker搭建kafka集群docker搭建kafka集群我在M1mbp上使用的以下镜像新建文件zk-kafka-docker-compose.ymlversion:”2″services:zookeeper:user:rootimage:docker.io/zookeeperports:-“12181:2181″environment:-ALLOW_ANONYMOUS_LOGIN=yesvolumes:-zoo

    2022年4月25日
    34
  • c 语言加壳项目,C 加壳工具,快速完成加密保护

    c 语言加壳项目,C 加壳工具,快速完成加密保护当前C#.net语言的应用范围越来越广泛,IIS的服务器架构后台代码、桌面应用程序的winform、Unity3d的逻辑脚本都在使用。C#.net具备强大的便捷特性,使得开发成本极低。而作为一款.net语言,也有它让开发者头疼的弊病——非常容易被反编译。市面上的Dnspy,ILspy,de4dot等工具可以非常容易反编译出被混淆保护的C#.net程序。01解决方案深思自主研…

    2022年6月27日
    40
  • SpringCloud(十)—–Gateway

    SpringCloud(十)—–Gateway

    2020年11月12日
    204
  • Springboot文件上传_maven上传jar包到远程仓库

    Springboot文件上传_maven上传jar包到远程仓库springboot文件上传机制:1.访问路径2. 上传完成后返回访问文件地址3. 我们只需要访问返回的地址就可以访问到图片4. yaml配置文件(localpath是实际存储的地址)5. 添加配置类,进行访问地址和存储地址映射 @Value(“${file.upload.suffixPath}”) private String uploadSuffixPath; @Value(“${file.upload.localPath}”) private Strin

    2022年8月8日
    5

发表回复

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

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