在C#中加密SQLite数据库

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

有像SQLite加密扩展和SQLite Crypt这样的工具,但两者都是非自由的,而我的项目是在GPL下。

我想要使​​用的天真方法是让SQLite处理一个临时文件,然后在程序退出时对其进行加密,并覆盖(清零)原始文件。 明显的缺点是,如果程序崩溃(并且在运行时),则可以访问纯文本DB。

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

[编辑]也许我在思考这个问题。 是否足以在连接字符串中使用密码选项? 在这种情况下,文件是否会被正确加密(或者是一些较弱的保护)?

我建议使用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 Crypto API进行加密。

看一眼:

http://zetetic.net/software/sqlcipher

它是开源的。

你也可以查询wxsqlite3的代码。

我会尝试http://code.google.com/p/csharp-sqlite/ ,它是在MIT许可下在C#中重写SQLite 3.6.16。 我想调整一下会很容易。

编辑:如下面的说明中所述,它还支持sqlcipher加密

更新:由于谷歌代码只读了项目已移至它自己的网站https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

此方法并非特定于SQLite本身,而是一般文件加密建议。

(1)使用TrueCrypt(free / opensource)创建加密的包装器文件。 此文件应大于数据库的预期最大大小。

(2)当您挂载此文件时,它将在您的计算机中显示为逻辑硬盘驱动器。

(3)将sqlite数据库保存在此逻辑硬盘中。

在通过odbc / jdbc或任何其他方法访问数据库之前安装驱动器。

这样做的好处是:即使有人可以访问您的数据库密码,他们也无法访问该文件,因为它已加密。 他们需要您的Truecrypt密码才能打开它。