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 和sqlite差不多的用法 ./sqlcipher test.db #创建一个db文件 sqlite> PRAGMA key = 'test'; #设置密码 sqlite> .e #退出
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 #退出
以上是前期使用过程,后面讲述遇到的问题。 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文件。 结束。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |