python利用windows编译的sqlcipher工具对sqlite数据库加密

用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: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的跨平台性。

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
SQLite数据库加密解密工具是指用于对SQLite数据库进行加密和解密操作的软件工具SQLite数据库是一种轻型的数据库管理系统,通常用于嵌入式设备或移动应用程序中。然而,SQLite数据库默认不支持加密功能,而在某些情况下,我们需要对数据库进行加密以保护数据安全性。 为了实现SQLite数据库加密功能,可以借助一些第三方工具,如SQLCipherSQLCipher是一款专门为SQLite数据库提供加密功能的开源软件,它基于SQLite的代码库进行了修改和扩展,使得SQLite数据库可以支持AES加密算法和SHA-256哈希算法,从而提供了强大的安全性。 使用SQLCipher加密SQLite数据库的过程包括以下几个步骤: 1. 下载并安装SQLCipher库文件。 2. 在应用程序中将原始SQLite库替换为SQLCipher库。 3. 生成一个加密密码,并将其与SQLite数据库关联。 4. 在访问SQLite数据库之前,使用密码对数据库进行解密。 5. 对数据库进行操作后,将其重新加密。 通过使用SQLCipher,我们可以为SQLite数据库提供强大的加密功能,确保数据在存储和传输过程中的安全性。同时,解密工具也可以用来解密加密SQLite数据库,以便进行数据的读取和操作。 总之,SQLite数据库加密解密工具是用于对SQLite数据库进行加密和解密操作的软件工具,可以通过使用第三方库如SQLCipher来实现数据库加密保护,提供数据的安全性和保密性。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值