Python:加密SQLite3数据库

一、加密SQLite3的库

  • sqleet:(目前)支持到 sqlite3-v3.31.1
  • SQLite3MultipleCiphers:支持到 sqlite3 最新版本

二、编译sqleet及SQLite3MultipleCiphers

2.1)编译 sqleet

cd sqleet
gcc -shared -Wall  -fPIC sqleet.c -lc -lpthread -ldl -o libsqlite3.so

其中 sqleet/libsqlite3.so 就是我们需要的目标文件。

2.2)编译SQLite3MultipleCiphers

# 编译
cd SQLite3MultipleCiphers/
autoreconf
mkdir build-gtk
cd build-gtk
../configure
make

# 创建软连接
cd .libs # SQLite3MultipleCiphers/build-gtk/.libs
ln -s libsqlite3mc.so libsqlite3.so

SQLite3MultipleCiphers/build-gtk/.libs/libsqlite3.so 就是我们需要的目标文件。

三、在 Python 中使用 libsqlite3.so

Python 中自带了 sqlite3,当在 Python 中执行 import sqlite3时,加载的就是默认的 libsqlite3.so。我们需要设置一下 LD_PRELOAD 环境变了,让 Python 在寻找 libsqlite3.so时,首先找到的是我们指定的文件。

下面使用 sqleet 编译出来的 libsqlite3.so 进行演示:

$ LD_PRELOAD=$(pwd)/libsqlite3.so python # 在 shell 中运行 python
Python 3.8.3 (default, Aug 31 2020, 16:03:14) 
[GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect('foo.db') # 创建一个新的数据库,文件名为 foo.db
>>> c = conn.cursor()
>>> c.execute("PRAGMA key='swordfish';") # 输入密码
<sqlite3.Cursor object at 0x7f4b8d6919d0>
>>> c.execute('create table foox (id int);') # 创建表
<sqlite3.Cursor object at 0x7f4b8d6919d0>
>>> c.close()
>>> conn.commit()
>>> conn.close()
>>> .q

测试一下新创建的加密数据库 foo.db

$ ./sqleet foo.db 
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tab
Error: file is not a database   # 没有输入密码,访问失败
sqlite> PRAGMA key='swordfish'; # 输入密码
ok                              # 输出ok,说明密码验证成功
sqlite> .tab                    # 验证密码通过后,访问成功
foox
sqlite> .q

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值