在 C# 中加密 SQLite 数据库

问题描述 投票:0回答:4

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

有像 SQLite Encryption ExtensionSQLite Crypt 这样的工具,但两者都是非免费的,而我的项目是在 GPL 下。

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

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

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

c# .net file sqlite encryption
4个回答
23
投票

我建议使用

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 进行加密。


7
投票

看一下:

http://zetetic.net/software/sqlcipher

它是开源的。

您还可以查看 wxsqlite3 的代码。


5
投票

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

编辑:正如下面的注释中提到的,它还支持sqlcipher加密

更新:自从Google Code变为只读以来,该项目已转移到它自己的网站https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki


0
投票

由于自

System.Data.SQLite
版本 1.0.113.0 起此解决方案不起作用,这里是作者使用
Microsoft.Data.SQLite.Core
SQLitePCLRaw.bundle_e_sqlcipher
的帖子的链接,并且它确实加密了数据库。

他甚至提供了带有 UWP 示例的源代码,但我已经在 .NET 6 中对其进行了测试,它应该适用于每种类型的项目。

© www.soinside.com 2019 - 2024. All rights reserved.