sqlcipher 命令行给db外部加密的实现

来源:互联网 发布:软件系统结构图阶段 编辑:程序博客网 时间:2024/04/28 06:37

关于Sqlcipher的加密解密

本文主要实验目的:外部用sqlcipher命令行给已有的数据库文件加密,而在Android程序中解密应用。

1. 首先 sqlcipher命令行Linux环境搭建

https://www.zetetic.net/sqlcipher/下载源码。

或者

https://github.com/sqlcipher/sqlcipher下载zip包,在linux系统下编译运行。


[plain] view plaincopy
  1. 1.解压  
  2. unzip -q sqlcipher-master.zip  
  3. cd sqlcipher-master  

[plain] view plaincopy
  1. 2.编译  
  2.   
  3. ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"  
  4. make  


编译完就会出现一个sqlcipher的可执行文件。


说明,在ubuntu12.04环境下configure  sqlcipher 会出现诸多error,经过反复查找问题,发现原来是编译环境缺少东西,主要缺少openssl相关库:

(ubuntu12.04下默认的gcc,g++为 4.6.3 configure时候老是找不着,试着重装gcc/g++ 4.4 ,congifure成功)。

sudo apt-get install openssl 
sudo apt-get install libssl-dev

以及gcc也做了不同版本的测试。

最终configure完成后,make的过程又出现一些莫名其妙的error, 在头文件以及alter.c文件缺少* )之类的。

由于坚信源码不会有什么问题,肯定是编译过程哪里出的毛病,所以回头看看configure,发现出现 tclsh cannot found的警告。

于是 apt-get install tclsh8.5 安装完成。($ sudo apt-get install tcl tk)

删除之前编译的工程,重新configure 以及make。终于编译通过,成功生成sqlcipher可执行文件。


2. Sqlcipher使用

(当然,如果没有安装Sqlite3 ,还需要apt-get install 安装一下)

和sqlite差不多的用法

[plain] view plaincopy
  1. ./sqlcipher test.db  #创建一个db文件  
  2.   
  3. sqlite> PRAGMA key = 'test';  #设置密码  
  4.   
  5. sqlite> .e  #退出  


三、把没加密的db文件进行加密步骤:

[sql] view plaincopy
  1. 1.先用sqlite打开db文件  
  2. sqlite3 test.db  

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 2.把数据导成sql格式  
  2. sqlite> .output test.sql  
  3. sqlite> .dump  
  4. sqlite> .e  

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. 3.加密  
  2. ./sqlcipher test2.db  #创建一个新的db文件  
  3. sqlite> PRAGMA key = 'test';  #设置密码  
  4. sqlite> .read test.sql  #导入数据  
  5. sqlite> .e  #退出  


完成,生成的test2.db文件就是一个加密过的db文件了。

 

以上是前期使用过程,后面讲述遇到的问题。

1、如何判断是否有加密过?

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./sqlcipher test.db #没加密过的  
  2. sqlite> .schema  
  3. CREATE TABLE XXXXXX...  #显示了表的创建语句  

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ./sqlcipher test2.db #没加密过的  
  2. sqlite> .schema  
  3. Error: file is encrypted or is not a database  
对于加密过的db文件,如果不先输入密码,后续关于数据库的操作都不能执行,都会出现Error: file is encrypted or is not a database错误

3. 将加密好的文件copy至Android终端下,通过Android代码入口可以成功访问数据库文件。

android sqlcipher使用详情参见上一篇文章

0 0
原创粉丝点击