SQLCipher 命令行使用 后台加密

这次遇到的问题是,手机终端需要加密sqlite的db文件,防止被别人看到相关数据,并且db文件在多个终端可以使用。

在网上找到的办法是使用第三方工具SQLCipher。

根据需求,要在后台系统生成相关加密完的db文件以供终端下载使用。

一开始也是一头雾水,在网上找了很多资料,写得不是很详细。

一、先把通用的编译过程写一下:

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

1.解压
unzip -q sqlcipher-master.zip
cd sqlcipher-master

2.编译

./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
make


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

二、使用SQLCipher

和sqlite差不多的用法

./sqlcipher test.db  #创建一个db文件

sqlite> PRAGMA key = 'test';  #设置密码

sqlite> .e  #退出


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

1.先用sqlite打开db文件
sqlite3 test.db

 

2.把数据导成sql格式
sqlite> .output test.sql
sqlite> .dump
sqlite> .e

 

3.加密
./sqlcipher test2.db  #创建一个新的db文件
sqlite> PRAGMA key = 'test';  #设置密码
sqlite> .read test.sql  #导入数据
sqlite> .e  #退出


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

 

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

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

./sqlcipher test.db #没加密过的
sqlite> .schema
CREATE TABLE XXXXXX...  #显示了表的创建语句

 

./sqlcipher test2.db #没加密过的
sqlite> .schema
Error: file is encrypted or is not a database

对于加密过的db文件,如果不先输入密码,后续关于数据库的操作都不能执行,都会出现Error: file is encrypted or is not a database错误。

 

2、生成的db文件使用问题

将生成的db文件发给终端,发现不能使用,报错都是Error: file is encrypted or is not a database。

终端生成一个db文件,放到另外一台手机上,也不能使用。

将生成的db文件放到另外一台服务器上使用,可以正常使用。怀疑是sqlcipher的版本不一致。在github上查看,下载的这个master版可能是v3.2.0的,又去下载tag为v3.0.0的编译运行,可以使用,再次去下载tag为v2.2.1的版本编译运行,db文件不能正常使用,于是确定,不同的版本生成的db文件可能不兼容。

再次尝试,2.2.1生成的db文件可以在终端正常使用,终端用的版本可能也是2.2的,于是,愉快地使用2.2.1的版本去生成db文件。

 

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值