【问题标题】:Encrypting a Sqlite db file that will be bundled in a pyexe file加密将捆绑在 pyexe 文件中的 Sqlite db 文件
【发布时间】:2010-10-03 04:55:25
【问题描述】:

我一直致力于开发此分析工具,以帮助解释和分析捆绑在软件包中的数据库。以一种只能通过我们的软件访问的方式保护数据库对我们来说非常重要。在 Python 中实现它的最佳方法是什么?

我知道可能没有明确的解决方案,但威慑才是真正重要的。

非常感谢。

【问题讨论】:

  • 一个专有的目标——帮助你锁定你的东西——并不是很多人愿意花时间免费做的事情。
  • 很难阻止人们获取他们已经拥有的数据(见证 DRM)。锁定对数据库的访问的最佳方法是根本不发送它,而是使用通过 Internet 发送的查询。很多这样的例子(即所有 web 应用程序的 99%)。我不知道这种架构是否适用于您的应用程序,但其他任何事情都很难(而且对于坚定的攻击者来说可能是不可能的)。

标签: python database sqlite encryption


【解决方案1】:

有人通过将 SQLCipher 重新构建为 DLL 并替换 Python 的 sqlite3.dll here,让 Python 和 SQLCipher 一起工作。

【讨论】:

  • @Michael:我不应该提供这个答案吗?
  • 在 *nix 系统上做什么(我在 mac 上)。
【解决方案2】:

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

无论你做了多少加密等,如果数据库在客户端机器上,那么解密的密钥也将在某些时候在机器上。攻击者将能够获得该密钥,因为它是他们的机器。

看待这个问题的更好方法是从金钱角度 - 一个坏人需要花多少钱才能获得数据。这通常最多几百美元。只需任何一个人获得密钥,然后他们就可以为每个人发布数据库。

所以要么选择 Donal 提到的 Web 服务,要么花几分钟时间混淆数据库。例如,如果您使用 APSW,那么您可以在几行中编写一个 VFS,对数据库内容进行 XOR,这样常规 SQLite 就不会打开它,文件查看器也不会显示正常的 SQLite 标头。 (APSW 中有示例代码展示了如何执行此操作。)

因此,任何拥有数据库内容的人都必须在知情的情况下这样做。

【讨论】:

  • FWIW,这是一个指向 example code 的链接,它显示了如何通过 XORing 混淆数据库文件的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多