sqlcipher移植

一、下载代码

sqlcipher依赖openssl库,首先下载openssl:

[[email protected] ~]$ git clone https://github.com/openssl/openssl.git

下载sqlcipher:

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

[[email protected] ~]$ git clone http://git.oschina.net/fulinux/sqlcipher.git

或者

[[email protected] ~]$ git clone https://github.com/sqlcipher/sqlcipher.git

二、编译

编译openssl:

[[email protected] openssl]$ ./config

[[email protected] openssl]$ sudo make install

编译sqlcipher:

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

如果遇到编译问题,请checkout到发行版本

[[email protected] sqlcipher]$git checkout v3.1.0 

编译成功后,工程根目录的下install/bin/中有一个sqlcipher执行文件,为了方便拷贝到工程根目录下:

[[email protected] sqlcipher]$ ls install/bin/
sqlcipher
[[email protected] sqlcipher]$ cp install/bin/sqlcipher .

三、测试

新建一个数据库:

[[email protected] 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

打开上面创建的数据库:

[[email protected] 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> 

错误测试:

[[email protected] 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查看数据:

[[email protected] 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文件:

[[email protected] 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:

[[email protected] 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 <[email protected]>
 *      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() ----- */

代码上面的代码可以在这里下载:

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

编译test.c文件,因为库和头文件都在/home/fulinux/sqlcipher/install目录下,所以下面参数如下:

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

执行测试程序:

[[email protected] 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:[email protected]

blog: blog.csdn.net/fulinus

sqlcipher移植

时间: 2024-11-02 12:46:04

sqlcipher移植的相关文章

【Windows10&nbsp;IoT开发系列】API&nbsp;移植工具

原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 API? 此工具可以为你回答这些问题,并协助你将你的当前 Win32 应用程序和库迁移到 Windows IoT Core. Windows 10 IoT 核心版 API 移植工具可在 ms-iot/iot-utilities github 存储库中找到.下载存储库 zip 并将 IoTAPIPor

LEDAPS1.3.0版本移植到windows平台----HuCsm云掩膜模块

这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuCsm是将LEDAPS项目中的TM/ETM+大气校正流程系列算法中的云掩膜模块由linux系统移植到windows下的产物,代码本身改动不大,使用接口不变. 包含文件: HuCsm.exe hd423m.dll hm423m.dll 编译程序需要包含的静态库有: gctp.lib hdfeos.lib hd423m.lib hm423m

学习者移植NES

http://blog.csdn.net/zerokkqq/article/details/52964249 http://bbs.eeworld.com.cn/thread-415692-1-1.html 上面这个是我移植参考他人的文件.手把手教你移植XXX,多牛逼. 作为承前启后的一件事,你要搞清楚接下来要做什么.别傻了,我们不可能知道之后每一个细节会怎样,所以这里的搞清楚也不是面面俱到,记得,不要总是急着一口气完成任务,之后我们的道路应该是一步一个脚印 1.我总是三分钟热度,希望这次不要断

基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

CoreData加密,使用SQLCipher

关键是使用SQLCipher,→GitHub地址 一.添加SQLCipher到项目中 使用CocoaPod: pod 'EncryptedCoreData', :git => 'https://github.com/project-imas/encrypted-core-data.git' 二.在 AppDelegate.m  添加 #import "EncryptedStore.h" 三.替换coordinator NSPersistentStoreCoordinator *c

ios开发FMDB导入SQLCipher加密数据库

转:http://www.2cto.com/kf/201407/315727.html [iOS]FMDB/SQLCipher数据库加解密,迁移

Cocos移植到Android的一些问题-SQLite3数据库移植问题

首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一种是从SQLite官网下载源代码拷贝的工程中.第一种方法配置起来比较麻烦,关键是Cocos2d-x提供的SQLite3库只是Win32没有其它平台的,目录结构如下所示.<游戏工程目录>\cocos2d\external\sqlite3│  Android.mk│├─include│      sq

ARM板ok6410移植qt4.84+opencv2.4.9初步成功

先上图,有图有真相,当课题重新回归到嵌入式搭载的老问题上时,我还一度各种担心,发现最新的A9板4412能用Android了,还想着偷懒买块现成的只做最顶层开发就好,结果找遍工业相机厂家没见到有提供Android驱动的,一了解才明白,Android驱动是基于linux驱动的貌似,于是乎,又尝试着回归到移植opencv到嵌入式linux的老路上来. 想当初,零linux基础的我对着借来的6410各种被蹂躏,历时1个月仅仅是搭建了能用板子自带的qt4.7.1库编写界面程序而已.那次各种编译错误,各种零