我有一个sqlite3 db,我在python中插入/选择。该应用程序工作得很好,但我想调整它,所以没有密码,没有人可以从数据库中读取。我怎么能在python中做到这一点?请注意我不知道从哪里开始。
答案 0 :(得分:9)
您可以使用SQLCipher。
SQLite的开源完整数据库加密
SQLCipher是一个SQLite扩展,为数据库文件提供透明的256位AES加密。页面在写入磁盘之前已加密,在回读时会被解密。由于占地面积小,性能卓越,因此非常适合保护嵌入式应用数据库,非常适合移动开发。
答案 1 :(得分:2)
正如Frontware建议的那样,你可以使用sqlcipher。
pysqlcipher python包可以使它更容易使用,因为它使用sqlcipher代码合并来编译扩展。
这应该只是使用pysqlcipher,因为你会使用常规的sqlite.dbapi2,只需设置正确的加密pragma。
答案 2 :(得分:1)
SQLite数据库非常易读,并且没有任何内置加密功能。
您是否担心有人直接访问和读取数据库文件,或通过您的程序访问它们?
我假设前者,因为后者并不是真正与数据库相关的 - 这是您正在询问的应用程序的安全性。
我想到了一些选择:
答案 3 :(得分:1)
我遇到了同样的问题。我的应用程序可能同时运行多个实例。因此,我不能只加密sqlite db文件并完成它。我也不相信在python中加密数据是一个好主意,因为在这种状态下你不能在数据库中对它进行任何严肃的数据操作。
考虑到这些限制因素,我提出了以下两个解决方案:
1)使用前面提到的SQLCipher。我在这里看到的问题是,我将不得不为Python编写自己的绑定,并自己编译(或支付费用)。在任何一种情况下我都可以这样做,因为对于其他Python开发人员来说这将是一个很好的解决方案。如果我成功了,我会回复解决方案。
2)如果选项1对我来说太难,或者太耗费时间,我会使用这种方法。这种方法不够安全。我将使用pycrypto来加密数据库文件。我将实现一个SQL“服务器”,它将解密数据库文件,然后处理来自不同客户端的请求。只要没有未完成的请求,它就会重新加密数据库。总而言之,这将是缓慢的,并使数据库处于临时解密状态。
希望这些想法可以帮助下一个人。
编辑2013年1月13日
我放弃了SQLCipher,因为我似乎无法将其编译,并且代码库正在尝试使用OpenSSL,而OpenSSL虽然是一个声音库,但却非常适合简单的AES 128。
我找到了另一个选项wxSQLite3,我发现了如何分离SQLite加密文件:https://github.com/shenghe/FreeSQLiteEncryption。我能够编译和工作(使用最新版本的SQLite3)。 wxSQLite3也支持AES 256,真的很酷。我的下一步是尝试使用修改过的sqlite3.dll编译pysqlite(这是python中内置的sqlite库)。如果可行,我将调整pysqlite以支持wxSQLite3的sqlite3.dll的扩展加密部分。在任何情况下,我都会尝试使用我的结果更新此线程,如果成功,我将在Github上发布带有构建指令的最终代码库。
答案 4 :(得分:0)
您可以使用 pysqlitecipher 模块 - https://github.com/harshnative/pysqlitecipher
您将失去内置的 sqlite 功能,但您可以直接在 Python 中实现它们,例如查询等。它在后台处理加密,因此您不必担心,加密标准也很棒。
上述模块解决的问题 - 对于使用 python 加密的 sqlite 数据库,他们不是一个简单的解决方案。
所有可用的解决方案都难以设置,如果您确实得到了,那么将解决方案转换为可执行文件就更加困难了。
但是 pysqlitecipher 是建立在核心 python 之上的,所以它很容易使用 pyinstaller 等模块转换为 exe