一、下载代码

sqlcipher赖openssl库,首先下载openssl:

[fulinux@ubuntu ~]$ git clone https://github.com/openssl/openssl.git

下载sqlcipher:

网站:http://git.oschina.net/fulinux/sqlcipher.git或者https://github.com/sqlcipher/sqlcipher.git

[fulinux@ubuntu ~]$ git clone http://git.oschina.net/fulinux/sqlcipher.git

或者

[fulinux@ubuntu ~]$ git clone https://github.com/sqlcipher/sqlcipher.git

二、编译

编译openssl:

[fulinux@ubuntu openssl]$ ./config
[fulinux@ubuntu openssl]$ sudo make install

编译sqlcipher:

[fulinux@ubuntu sqlcipher]$mkdir install
[fulinux@ubuntu sqlcipher]$./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" --prefix=$PWD/install && make install

假设遇到编译问题,请checkout到发行版本号

[fulinux@ubuntu sqlcipher]$git checkout v3.1.0 

编译成功后。project根文件夹的下install/bin/中有一个sqlcipher运行文件,为了方便复制到project根文件夹下:

[fulinux@ubuntu sqlcipher]$ ls install/bin/
sqlcipher
[fulinux@ubuntu sqlcipher]$ cp install/bin/sqlcipher .

三、測试

新建一个数据库:

[fulinux@ubuntu sqlcipher]$ ./sqlcipher test.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA KEY = '12345';
sqlite> create table film (number,name);
sqlite> insert into film values (1,'aaa');
sqlite> insert into film values (2,'bbb');
sqlite> select * from film;
1|aaa
2|bbb
sqlite> .quit

打开上面创建的数据库:

[fulinux@ubuntu sqlcipher]$ ./sqlcipher test.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA KEY = '12345';
sqlite> .schema
CREATE TABLE film (number,name);
sqlite> select * from film;
1|aaa
2|bbb
sqlite>

错误測试:

[fulinux@ubuntu sqlcipher]$ ./sqlcipher test.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from film;
Error: file is encrypted or is not a database
sqlite>

四、加密前后測试

用sqlite3查看数据:

[fulinux@ubuntu sqlite]$ sqlite3 test.db
SQLite version 3.8.5 2014-06-04 14:06:34
Enter ".help" for usage hints.
sqlite> select * from test;
1|hxl
2|sqlite
3|test
4|for
5|linux
sqlite>

用vim -b test.db,然后用xxd把文件转换成十六进制格式

:%!xxd

能够看到数据是没有加密的,显而易见:

00007d0: 0000 0805 0300 176c 696e 7578 0604 0300  .......linux....
00007e0: 1366 6f72 0703 0300 1574 6573 7409 0203 .for.....test...
00007f0: 0019 7371 6c69 7465 0601 0300 1368 786c ..sqlite.....hxl

再把这个没有加密的test.db数据库文件通过sqlcipher转换为加密格式的。

1、用sqlcipher或者sqlite打开未加密的test.db文件:

[fulinux@ubuntu sqlcipher]$ ./sqlcipher test.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from test;
1|hxl
2|sqlite
3|test
4|for
5|linux
sqlite>

2、把数据导成sql格式文件:

sqlite> .output test.sql
sqlite> .dump
sqlite> .exit

3、结合test.sql文件生成一个加密的数据库文件test1.db:

[fulinux@ubuntu sqlcipher]$ ./sqlcipher test1.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA key = 'test';
sqlite> .read test.sql
sqlite>
sqlite> select * from test;
1|hxl
2|sqlite
3|test
4|for
5|linux
sqlite> .exit

4、导入成功后,我们在用vim -b打开test1.db数据库文件。能够觉得你看到的基本上都是乱码:

00001b0: 913c 52e4 5809 83b9 153a 8d5d 4b84 9715  .<R.X....:.]K...
00001c0: a552 f8fb 9e3f 9637 4c9a 4b00 2259 a95b .R...?.7L.K."Y.[
00001d0: 91d6 95da ce34 f9f2 5b05 2bea 439b 7cae .....4..[.+.C.|.
00001e0: 1e60 333f 5323 21a9 989b a08a ad4f ea78 .`3?S#!......O.x

五、C代码測试

编辑一个C代码文件test.c。代码能够:

/*********************************************************************************
* Copyright: (C) 2014 EAST
* All rights reserved.
*
* Filename: test.c
* Description: This file
*
* Version: 1.0.0(07/25/2014)
* Author: fulinux <fulinux@sina.com>
* ChangeLog: 1, Release initial version on "07/25/2014 05:15:05 PM"
*
********************************************************************************/ #include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> static int callback(void *notused, int argc, char **argv, char **azcolname)
{
int i;
for(i = 0; i < argc; i++){
printf ("%s = %s\n", azcolname[i], argv[i]?argv[i]:"NULL");
} printf ("\n");
return 0;
} /********************************************************************************
* Description:
* Input Args:
* Output Args:
* Return Value:
********************************************************************************/
int main (int argc, char **argv)
{
sqlite3 *db;
char *zerrmsg = 0;
int rc; if(argc != 3){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
exit(0);
} rc = sqlite3_open(argv[1], &db);
if(rc){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 1;
} sqlite3_key(db, "test", 4);
rc = sqlite3_exec(db, argv[2], callback, 0, &zerrmsg);
if(rc != SQLITE_OK){
fprintf(stderr, "SQL error: %s\n", zerrmsg);
sqlite3_free(zerrmsg);
} sqlite3_close(db);
return 0;
} /* ----- End of main() ----- */

代码上面的代码能够在这里下载:

[fulinux@ubuntu ~]$ git clone http://git.oschina.net/fulinux/jupiter.git
[fulinux@ubuntu jupiter]$ git checkout sqlcipher

编译test.c文件,由于库和头文件都在/home/fulinux/sqlcipher/install文件夹下,所以以下參数例如以下:

[fulinux@ubuntu jupiter]$ gcc -g test.c -o test -lsqlcipher -L /home/fulinux/sqlcipher/install/lib/ -I /home/fulinux/sqlcipher/install/include/sqlcipher/

运行測试程序:

[fulinux@ubuntu jupiter]$./test test1.db "select * from test;"
id = 1
value = hxl
id = 2
value = sqlite
id = 3
value = test
id = 4
value = for
id = 5
value = linux

相关网址:http://sqlcipher.net/sqlcipher-api/

author: fulinux

e-mail:fulinux@sina.com

blog: blog.csdn.net/fulinus

版权声明:本文博主原创文章,博客,未经同意不得转载。

sqlcipher移植的更多相关文章

  1. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  2. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  3. Linux主机上使用交叉编译移植u-boot到树莓派

    0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...

  4. STM32F429 LCD程序移植

    STM32F429自带LCD驱动器,这一具有功能给我等纠结于屏幕驱动的程序员带来了很大的福音.有经验的读者一定有过这样的经历,用FSMC驱动带由控制器的屏幕时候,一旦驱动芯片更换,则需要重新针对此驱动 ...

  5. 将MPM雪模拟移植到Maya

    同事实现了一个迪士尼的MPM雪模拟论文,我将其移植到Maya中 论文题目是 A material point method for snow simulation 代码在这里: https://git ...

  6. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  7. Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...

  8. DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一

    关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...

  9. geotrellis使用(二十五)将Geotrellis移植到spark2.0

    目录 前言 升级spark到2.0 将geotrellis最新版部署到spark2.0(CDH) 总结 一.前言        事情总是变化这么快,前面刚写了一篇博客介绍如何将geotrellis移植 ...

随机推荐

  1. linux File Handling commands 'ls'.

    ref:Linux / Unix Command: ls NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DES ...

  2. Linux sed命令删除指定行

    一.删除包含匹配字符串的行## 删除包含baidu.com的所有行sed -i '/baidu.com/d' domain.file 二.删除匹配行及后所有行## 删除匹配20160229的行及后面所 ...

  3. 【转】那些好用的iOS开发工具

    原文:http://www.devtang.com/blog/2014/06/29/ios-dev-tools/ 前言 从苹果发明iPhone起,AppStore上的一个又一个类似flappy bir ...

  4. Swift - 30 - 可变参数

    //: Playground - noun: a place where people can play import UIKit // 可变参数一定要放在所有定义参数的最后面, 和其他参数的定义方式 ...

  5. Android放大镜的实现

    package chroya.demo.magnifier; import android.content.Context; import android.graphics.Bitmap; impor ...

  6. work登录页

  7. Websocket 与代理服务器如何交互? How HTML5 Web Sockets Interact With Proxy Servers

    How HTML5 Web Sockets Interact With Proxy Servers Posted by Peter Lubberson Mar 16, 2010 With the re ...

  8. 【leetcode】62. Uniqe Paths

    题目 https://oj.leetcode.com/problems/unique-paths/   A robot is located at the top-left corner of a m ...

  9. Python——学习笔记

    list  ['','',''] 类似PHP数组   可以修改 tuple  ('','')  不能修改其中的元素 切片 list[int 开始: int 结束: int 间隔=1] 字符串也可以看成 ...

  10. 托管host

    托管在googlecode的host https://smarthosts.googlecode.com/svn/trunk/hosts