加密将打包入pyexe文件的Sqlite数据库文件

4 投票
2 回答
4329 浏览
提问于 2025-04-16 04:55

我一直在开发一个分析工具,目的是帮助理解和分析一个包含在软件包里的数据库。对我们来说,确保这个数据库的安全性非常重要,只有我们的软件才能访问它。请问在Python中,怎么做才能达到这个目的呢?

我知道可能没有一个绝对的解决办法,但其实最重要的是让别人不容易访问到它。

非常感谢!

2 个回答

5

有人把Python和SQLCipher结合在一起,方法是把SQLCipher重建成一个DLL文件,然后用这个新的DLL文件替换掉Python自带的sqlite3.dll,具体的做法可以在这里找到。

3

这个问题在SQLite用户邮件列表上大约每个月都会出现一次。

无论你做多少加密,如果数据库在客户端机器上,那么解密的钥匙最终也会在这台机器上。攻击者可以轻易获取这个钥匙,因为那是他们的机器。

换个角度来看这个问题,可以用钱来比喻——坏人需要花多少钱才能获取这些数据。通常来说,这个成本最多也就是几百美元。而且只要有一个人拿到了钥匙,他们就可以把数据库公开给所有人。

所以,要么像Donal提到的那样使用网络服务,要么花几分钟时间对数据库进行混淆。例如,如果你使用APSW,你可以用几行代码写一个虚拟文件系统(VFS),把数据库内容进行异或处理,这样普通的SQLite就打不开它,文件查看器也看不到正常的SQLite头部。(APSW里有示例代码教你怎么做。)

因此,任何拥有数据库内容的人都是明知故犯。

撰写回答