python利用windows编译的sqlcipher工具对sqlite数据库加密
来源:互联网 发布:电信云计算 编辑:程序博客网 时间:2024/06/05 01:03
用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可执行文件会出现以下的提示:
SQLCipher version 3.8.0.2 2013-09-03 17:11:13Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>
记住这里要运行的话不能直接打开exe,因为你要用该工具去处理或者新建的sqlite数据库文件,所以这里采用在cmd下运行。
打开cmd,cd到exe文件所在的目录下,然后输入命令:sqlcipher.exe -help,这里就会列出它的用法,具体可以敲该命令看看。好了,这里我们先来在命令行下利用该工具加密一个已存在的未加密的sqlite数据库(暂且叫它origin.db)吧,具体如下:
F:\Download>sqlcipher64.exe origin.dbSQLCipher version 3.8.0.2 2013-09-03 17:11:13Enter ".help" for instructionsEnter 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 osimport sysimport subprocessimport platformdef 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的跨平台性。
- python利用windows编译的sqlcipher工具对sqlite数据库加密
- SQLCipher加密SQLite数据库
- Android使用SQLCipher对SQLite数据库进行加密
- 用sqlcipher对已有的SQLite数据库加密
- Sqlite数据库加密框架 sqlcipher
- sqlite 数据库加密(SQLCipher)
- sqlite 数据库加密(SQLCipher)
- 使用SQLCipher对数据库加密
- 用Sqlcipher给现有的SQLite数据库加密
- Android中对sqlite加密--SQLCipher
- IOS集成SQLCipher加密SQLite数据库
- Android加密已有的sqlite数据库---sqlcipher
- 使用SQLCipher 对sqlite数据库进行解密
- SQLite加密库SQLCipher
- sqlite加密-SQLCipher
- sqlite加密-SQLCipher
- sqlite加密-SQLCipher
- 【精】sqlite加密-SQLCipher
- [插件/工具]微信小程序实用组件:带字母滑动的listview
- Android项目
- 匿名内部类简单实例
- 算法题目---二叉树中和为某一值的路径
- N-gram的原理、用途和研究
- python利用windows编译的sqlcipher工具对sqlite数据库加密
- 顶点缓冲对象(VBO)的用法
- POJ-3370 Halloween treats (抽屉原理)
- 广东省产业园区——清远华侨工业园
- java和mysql计算两个时间的天数
- js笔记八:class
- LeetCode 136. Single Number
- MyCAT缺点
- C++三大特性之继承