sqlite3加密方案sqlcipher,及sqlcipher使用指南

sqlite是一款开源的轻量级数据库,现在android和ios都在使用它来存储结构化数据,但是加密版的并非开源。折中一下只能找开源的解决方案,sqlcipher是一个不错的选择,它可以对sqlite实现加密,并且有在android和ios都有相应的库进行解密读取,只是引入的库会增加app的大小。SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database
files.

1.下载源代码

官方源代码:https://github.com/sqlcipher/sqlcipher

2、相关的依赖

安装openssl及tcl,这两个依赖必须安装,不然就会很悲剧

openssl 使用yum openssl-devel 安装,tcl使用yum tcl-devel安装

3、编译

./configure –enable-tempstore=yes CFLAGS=”-DSQLITE_HAS_CODEC” LDFLAGS=”-lcrypto”

make

4.验证编译是否成功

创建一个加密的数据,密码是aaa:

$ sqlcipher test.sqlite

SQLite version 3.7.14.1 2012-10-04 19:37:12

Enter “.help” for instructions

Enter SQL statements terminated with a “;”

sqlite> PRAGMA key = ‘aaa’;

sqlite> create table a(ind int);

sqlite> .tables

a

sqlite> .quit

尝试不输入密码,直接读取数据库,理论上是读不到数据,或者报错:

$ sqlcipher test.sqlite

SQLite version 3.7.14.1 2012-10-04 19:37:12

Enter “.help” for instructions

Enter SQL statements terminated with a “;”

sqlite> .tables

sqlite> .quit

尝试正确输入密码,应该成功读取:

$ sqlcipher test.sqlite

SQLite version 3.7.14.1 2012-10-04 19:37:12

Enter “.help” for instructions

Enter SQL statements terminated with a “;”

sqlite> PRAGMA key = ‘aaa’;

sqlite> .tables

a

sqlite> .quit

给现有数据进行加密

如何给现有的sqlite文件进行加密,没有别的简单的方法:

1.先把数据导出:

$ sqlite3 ifood.sqlite

>.output ifood.sql

>.dump

2.创建一个新的加密的数据库:

$ sqlcipher ifood_lock.sqlite

sqlite> PRAGMA key = ‘abcdef’; # 设置密码

3.导入数据

>.read ifood.sql

SQLCipher For Android

https://github.com/sqlcipher/sqlcipher

这是源码需要编译,比较麻烦,可以到http://download.csdn.net/detail/wdxin1322/8378519

使用很简单,可以参照 https://www.zetetic.net/sqlcipher/sqlcipher-for-android/,然后将项目中的sqllite 的import改成相应的SQLCipher就可以了

我的个人博客程序猿日记——王德新的个人博客

时间: 2024-10-27 12:09:21

sqlite3加密方案sqlcipher,及sqlcipher使用指南的相关文章

sqlite3加密方案

sqlite3加密方案 sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便. wxSqlite3 wxSqlite3是wxWidgets的扩展组件,对sqlite3的C API进行了封装,并且实现了加解密功能.目前支持两种算法,AES128算法(默认)和AES256算法wxSqlite在secure/src/sqlite3secure.c中引入了其他源文件,这样你只用编译sqlite3secure.c

基于RSA的WEB前端密码加密方案

受制于WEB页面源码的暴露,因此传统的对称加密方案以及加密密钥都将暴露在JS文件中,同样可以被解密. 目前比较好的解决方案是WEB页面全程或用户登录等关键环节使用HTTPS进行传输. 另外一种解决方案就是通过RSA进行加密. RSA是一种非对称加密,也就是客户端通过公钥进行加密,服务端通过私钥进行解密.RSA算法请点击百度百科进行了解. 也就是说公钥并不能进行解密,因此进行明文传输也是安全的. 1.加密流程 服务端生成一组公钥与私钥,将公钥发送给客户端进行密码加密,在使用密钥进行解密. 2.密钥

利用基于控制器的加密方案进行数据保护(三)

利用基于控制器的加密方案进行数据保护(三) 提交加密模块进行FIPS验证须知 本系列文章中第一篇简要介绍了FIPS验证流程:第二篇则探究了FIPS 140-2的验证级别及其要求. 本篇是此系列博文的最后一篇,讲解提交加密模块进行FIPS验证时的其他注意事项. 客户须知 开发加密模块进行FIPS验证时需要完成若干步骤,高级别的认证包括如下步骤: 1.    与一家FIPS140加密及安全测试(CST)实验室签订合同. 2.   定义加密边界,并确保其满足FIPS 140-2要求. 3.   采取措

利用基于控制器的加密方案进行数据保护(二)

利用基于控制器的加密方案进行数据保护(二) FIPS 140-2验证级别及需求 本加密系列的第一篇博文解释了基于控制器的加密(CBE),并概要介绍了FIPS验证流程.现在来探讨一下Federal Information Processing Standards 140 (FIPS 140-2,联邦信息处理标准)的验证级别及其需求. FIPS 140-2验证级别 与加密模块的设计与实现相关的领域共有十一个,其中每个领域的安全级别可以划分为1(最低)到4(最高)不等. 加密模块还有一个总安全级别的评

lua 代码加密方案

require 实现 require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的加载函数,成功后返回.在loadlib.c文件中有四个加载函数的实现,分别为searcher_preload, searcher_Lua, searcher_C, searcher_Croot. searcher_preload是从读取LUA_REGISTRYINDEX的_PRELOAD字段,已经require过的文件会写入到该表中 searcher_L

简单安全的电脑文件加密方案?如何控制数据文档随意外发?选择湖南风奥科技

网络技术的普及程度的提高,确实给该阶段时代的发展带来便利,也让人们享受到互联网发展带来的快捷!人们在享受互联网发展带来的快捷感的同时,大家是否思考过,互联网的发展又会给这个时代带来哪些危机? 为什么要加强对电脑文件加密的使用?相信不少的企业以及个人都在互联网新闻上看到了不少关于某某企业.某某机构等数据泄露,多少多少数据泄露为企业带来了什么样的影响等等诸如此类的相关报道!正是因为这些数据泄露事件在互联网上的公开,让现阶段的政府部门等等加强了对互联网市场安全监管,同时企事业单位也加强了对自身企业数据

面试官:怎么设计大文件、大数据场景下的传输加密方案?

某年某月某一天,冷冽寒风中,姚小毛走进了某家公司,开始了新一轮的面试. 一阵寒暄后. 面试官:"你好,看你的项目经验中有做过数据加密的工作,你是使用什么加密算法加解密的?" 姚小毛:"嗯,我是采用的 非对称加密 + 对称加密 的混合加密算法." 面试官:"为什么要用混合加密的方式?" 姚小毛:"非对称加密跟对称加密都各有优缺点. 非对称安全性好点,由发送方跟接收方分别持有公钥.私钥. 但是缺点是在做大数据量的加密传输时,传输速度会比较慢

将jdbc连接明文密码加密方案

最近没有及时写文章,把最近处理的几个问题集中了一下写出来.这篇文章是关于如何处理spring项目中引入数据库连接等 使用的用户名和密码的明文进行加密.防止被他人窃取利用. 我们选择的加密方式为DES加密解密方案.直接上代码: 1. 首先要编写一个DES加密解密工具. package com.nc.jdbc; import com.nc.utils.Base64; import javax.crypto.*; import javax.crypto.spec.DESKeySpec; import

一种简单的登录加密方案

该方案使用RSA加密和解密. 每次登录前,客户端从服务器端获取公钥和随机值. 公钥用于加密明文: 随机值可以加强每一次操作的安全性,随机值也加入明文中一并加密,服务端对随机值进行校验,校验后从缓存中销毁,这样就算被别人拿到加密后的密文再次发起请求,由于随机值已失效,请求也是无效的. 下面以js客户端为例,演示一下流程: 1.假设客户的密码以SHA256加密后存在数据库中 2..客户输入用户名和密码点击 “登录”后,客户端发起请求,从服务器端获取公钥和随机值. { "rand": &qu