python利用windows编译的sqlcipher工具对sqlite数据库加密
2017-07-17 11:15
225 查看
用python进行sqlite加密,这里选择的还是sqlcipher。其实在python中,python也集成了python的sqlcipher扩展包:pysqlclipher,奈何在这里安装这个扩展包我觉得很麻烦(关于安装方法点这里),于是我放弃了这个,打算用已经编译好的windows的sqlcipher工具。
这里,关于sqlcipher.exe的下载链接可以看这个:点击打开链接,我这里下载的是3.x版本的,2.x版本的我没有用。这里也给出2.x版本的地址及使用方法点击打开链接。
下载完之后,只需要在bin文件夹中找到sqlcipher-shell32.exe或者sqlcipher-shell84.exe,bin文件夹里其他的文件貌似都没有用(这里我尝试是没有用的)。这里看你的windows机器是32位或者64位,然后打开对应的exe可执行文件会出现以下的提示:
记住这里要运行的话不能直接打开exe,因为你要用该工具去处理或者新建的sqlite数据库文件,所以这里采用在cmd下运行。
打开cmd,cd到exe文件所在的目录下,然后输入命令:sqlcipher.exe -help,这里就会列出它的用法,具体可以敲该命令看看。好了,这里我们先来在命令行下利用该工具加密一个已存在的未加密的sqlite数据库(暂且叫它origin.db)吧,具体如下:
这里sqlcipher64.exe与origin.db文件在F盘的Download目录下;
当执行完上面的程序后,Download文件夹下就会有一个加密了的encrypt.db文件。
当然如果批量操作加密数据库文件或者是自动化操作,当然是选择用脚本处理啊,之类的。这里先给出python自动化执行的的具体代码:
注意,其实最重要的就是上面的那句标红的cmd命令,(开始以为很简单,把那些sqlite语句命令都当作系统命令调用去写了
,结果发现第一句执行完之后系统就卡住了,原来那些sqlite语句是在该工具的进程里面执行的),最后经过尝试,看了一下-help命令,发现-init是在该"工具执行之前运行-init后跟的文件内的命令"的意思,所以代码里面的cmd命令意思就是用工具打开未加密的文件,然后运行-init后跟的cmd文件内的sqlite语句命令,最后.q退出。这里的cmd文件我没有命名文件格式,直接notepad++打开,放入sqlite命令。最后运行即可。这里cmd文件也在Download文件目录下,执行上面python代码就可以生成加密后的encrypt.db文件啦。
顺便这里说下,我用该加密脚本在电脑上加密了sqlite数据库文件,然后在android APP内用sqlcipher解密是可以的哦,这也多亏了sqlcipher的跨平台性。
这里,关于sqlcipher.exe的下载链接可以看这个:点击打开链接,我这里下载的是3.x版本的,2.x版本的我没有用。这里也给出2.x版本的地址及使用方法点击打开链接。
下载完之后,只需要在bin文件夹中找到sqlcipher-shell32.exe或者sqlcipher-shell84.exe,bin文件夹里其他的文件貌似都没有用(这里我尝试是没有用的)。这里看你的windows机器是32位或者64位,然后打开对应的exe可执行文件会出现以下的提示:
SQLCipher version 3.8.0.2 2013-09-03 17:11:13 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
记住这里要运行的话不能直接打开exe,因为你要用该工具去处理或者新建的sqlite数据库文件,所以这里采用在cmd下运行。
打开cmd,cd到exe文件所在的目录下,然后输入命令:sqlcipher.exe -help,这里就会列出它的用法,具体可以敲该命令看看。好了,这里我们先来在命令行下利用该工具加密一个已存在的未加密的sqlite数据库(暂且叫它origin.db)吧,具体如下:
F:\Download>sqlcipher64.exe origin.db
SQLCipher version 3.8.0.2 2013-09-03 17:11:13 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> ATTACH DATABASE 'encrypt.db' AS encrypted KEY 'thiskey';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;
sqlite> .q
这里sqlcipher64.exe与origin.db文件在F盘的Download目录下;
sqlcipher64.exe origin.db //打开一个sqlite数据库文件,如果不存在则进行新建
ATTACH DATABASE 'encrypt.db' AS encrypted KEY 'thiskey'; //新建一个数据库文件,并打开连接。这里encrypt.db是用来当作加密后的db文件,encrypted是该数据库的别名,“thiskey”是新建的这个数据库文件的密码
SELECT sqlcipher_export('encrypted'); //拷贝原数据库文件数据到新建的encrypt.db文件中
DETACH DATABASE encrypted; //断开连接最后的.q是quit退出的意思。注意上面的sqlite语句后面都加的有分号。
当执行完上面的程序后,Download文件夹下就会有一个加密了的encrypt.db文件。
当然如果批量操作加密数据库文件或者是自动化操作,当然是选择用脚本处理啊,之类的。这里先给出python自动化执行的的具体代码:
import os import sys import subprocess import platform def encryptDB(DBName): # 传入未加密的文件 if not os.path.exists(DBName): print 'not have the download db,can not encrypt' else: encryptedDBName = 'encrypt.db' if os.path.exists(encryptedDBName): os.remove(encryptedDBName) os_bit = platform.architecture()[0] # 判断系统是64位还是32位来选择对应的文件 openToolName = 'sqlcipher64.exe' if os_bit == '32bit': openToolName = 'sqlcipher32.exe' cmd = "%s %s -init cmd .q" % (openToolName, DBName) #调用该命令来执行生成加密文件 os.system(cmd) if os.path.exists(encryptedDBName): print 'the database has encrypted successfully,please use the %s for WordingAPK' % encryptedDBName else: print 'database encrypted fail' if __name__ == '__main__': pyPath = os.path.split(os.path.realpath(sys.argv[0]))[0] os.chdir(pyPath) print pyPath encryptDB('origin.db')cmd文件
ATTACH DATABASE 'encrypt.db' AS encrypted KEY 'thisiskey'; SELECT sqlcipher_export('encrypted'); DETACH DATABASE encrypted;
注意,其实最重要的就是上面的那句标红的cmd命令,(开始以为很简单,把那些sqlite语句命令都当作系统命令调用去写了
,结果发现第一句执行完之后系统就卡住了,原来那些sqlite语句是在该工具的进程里面执行的),最后经过尝试,看了一下-help命令,发现-init是在该"工具执行之前运行-init后跟的文件内的命令"的意思,所以代码里面的cmd命令意思就是用工具打开未加密的文件,然后运行-init后跟的cmd文件内的sqlite语句命令,最后.q退出。这里的cmd文件我没有命名文件格式,直接notepad++打开,放入sqlite命令。最后运行即可。这里cmd文件也在Download文件目录下,执行上面python代码就可以生成加密后的encrypt.db文件啦。
顺便这里说下,我用该加密脚本在电脑上加密了sqlite数据库文件,然后在android APP内用sqlcipher解密是可以的哦,这也多亏了sqlcipher的跨平台性。
相关文章推荐
- 利用ddk自带的工具build.exe编译windows驱动
- windows环境中利用NMake工具编译连接C++源代码
- windows中使用Python进行AES加密解密-文本文件加密工具
- 利用ddk自带的工具build.exe编译windows驱动
- 利用ddk自带的工具build.exe编译windows驱动
- sqlite数据库加密-SQLCipher编译安装及使用
- RT-thread 利用Scons 工具编译提示python编码错误解决办法
- Linux安装编译SQLCipher,对sqlite数据库加密、解密、修改、去掉密码操作
- Python编程-数据库-利用PyMysql访问windows下的MySql数据库
- windows平台安装gcc等编译工具
- 在windows下安装配置python开发环境及Ulipad开发工具
- 利用Crosstool-ng 1.3.3 生成powerpc交叉编译工具链
- Windows下面编译Python脚本为动态链接库的方法
- windows下安装python的easy_install工具
- Windows下利用CMake和VS2013编译OpenCV
- .NET Reflector编译工具利用
- Python:利用pexpect库直接解压缩加密的zip文件。
- 利用ProcDump工具诊断Windows平台上的Oracle数据库性能
- 利用python进行数据分析(三):pandas--处理数据的工具