在.Net / C#中加密SQLite数据库文件的最佳方法是什么?我正在使用sqlite-dotnet2包装器。
有SQLite Encryption Extension和SQLite Crypt等工具,但两者都不是免费的,而我的项目是在GPL下。
我想要使用的天真方法是让SQLite处理一个临时文件,然后在程序退出时对其进行加密,并覆盖(清零)原始文件。显而易见的缺点是,如果程序崩溃(并且在运行时),则可以访问纯文本DB。
有没有更好的方法来解决这个问题?我可以将加密流传递给包装器(而不是使用SQLiteConnection.CreateFile)吗?
[编辑]也许我在思考这个问题。是否足以在连接字符串中使用密码选项?在这种情况下,文件是否会被正确加密(或者是一些较弱的保护)?
答案 0 :(得分:20)
我建议使用包含加密的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进行加密。
答案 1 :(得分:7)
答案 2 :(得分:5)
我会尝试http://code.google.com/p/csharp-sqlite/,它是在MIT许可下用C#重写SQLite 3.6.16。我想这很容易调整它。
编辑:如下面的说明中所述,它还支持 sqlcipher 加密
更新:由于Google代码已读取,因此该项目已移至其自己的网站https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki