【问题标题】:Encrypt SQLite database in C#在 C# 中加密 SQLite 数据库
【发布时间】:2010-11-18 13:49:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • > 有 SQLite Encryption Extension 和 SQLite Crypt 之类的工具,但两者都是非免费的,而我的项目属于 GPL。我们还没有尝试将它与 .NET 一起使用,但我在 [SQLCipher][1] 的开发团队中,它基本上是提供透明数据库加密的免费且不受阻碍的 SQLite 版本。我建议将它用于需要嵌入式数据库的移动和/或独立应用程序设置。 [1]:github.com/sjlombardo/sqlcipher
  • ...和 ​​.NET 版本的 SQLCipher 现在也是商业产品 :(

标签: c# .net file sqlite encryption


【解决方案1】:

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

【讨论】:

  • 链接已损坏。你能提供新的吗?
  • 在 2011 年软件控制权转移到 system.data.sqlite.org 后,Robert Simpson 似乎放弃了 phxsoftware 网站。我认为旧的论坛页面不会发布到其他任何地方。
  • 版本 113 确实放弃了对 SetPassword 的支持。 SEE 是一种新的方式,即使它确实要花费 2000 美元并且需要手动编译。
【解决方案2】:

我会尝试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

【讨论】:

  • C#-SQLite 包含对 sqlcipher 包的内置支持;您使用 SQLITE_HAS_CODEC 编译它并使用 PRAGMA hexkey="0x0102030405060708090a0b0c0d0e0f10"; 激活它;
【解决方案3】:

看看:

http://zetetic.net/software/sqlcipher

它是开源的。

您也可以查看 wxsqlite3 的代码。

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多