代码之家  ›  专栏  ›  技术社区  ›  dbkk

在C中加密SQLite数据库#

  •  15
  • dbkk  · 技术社区  · 16 年前

    在.NET/C中加密sqlite数据库文件的最佳方法是什么?我在用 sqlite-dotnet2 包装器。

    有一些工具 SQLite Encryption Extension SQLite Crypt 但两者都是非免费的,而我的项目是在GPL之下的。

    我想到的最简单的方法是让sqlite处理一个临时文件,然后在程序退出时对其进行加密,并覆盖(归零)原始文件。明显的缺点是,如果程序崩溃(并且在运行时),纯文本数据库是可以访问的。

    有没有更好的方法来解决这个问题?我可以将加密流传递给包装器吗(而不是使用sqliteconnection.createfile)?

    [编辑]也许我想得太多了。是否足以在连接字符串中使用密码选项?在这种情况下,文件是否正确加密(或者它是否具有较弱的保护)?

    3 回复  |  直到 8 年前
        1
  •  20
  •   Marcello B.    8 年前

    我建议使用 System.Data.Sqlite 包装,包括加密。它工作得很好,很容易使用,而且是一个完整的ADO.NET实现。你可以从 https://system.data.sqlite.org ,开发人员将在以下网址介绍如何在本论坛上使用加密: https://web.archive.org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx . 提示-您刚刚设置了密码属性。他还描述了如何在论坛的其他地方使用Microsoft CryptoAPI进行加密。

        2
  •  7
  •   Krog    16 年前

    看一看:

    http://zetetic.net/software/sqlcipher

    它是开源的。

    您也可以选择wxsqlite3的代码。

        3
  •  5
  •   Marcello B.    8 年前

    我会尝试 http://code.google.com/p/csharp-sqlite/ ,它重写了C中的sqlite 3.6.16,获得了麻省理工学院的许可。我想很容易调整一下。

    编辑: 如以下注释所述,它还支持 SQL加密器 加密

    更新: 自从google code变成只读后,这个项目就转到了自己的网站上。 https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki