在C#中加密SQLite数据库

23
什么是在.Net/C#中加密SQLite数据库文件的最佳方法?我正在使用sqlite-dotnet2包装器。
有一些工具,如SQLite Encryption ExtensionSQLite Crypt,但两者都是非免费的,而我的项目受到GPL的保护。
我想到的天真的方法是让SQLite处理临时文件,然后在程序退出时将其加密,并覆盖(清零)原始文件。明显的缺点是,如果程序崩溃(并且在运行时),则可以访问纯文本DB。
有更好的方法来解决这个问题吗?我可以传递一个加密流给包装器(而不是使用SQLiteConnection.CreateFile)吗?
[编辑]也许我想太多了。在连接字符串中使用Password选项是否足够?在这种情况下,文件是否会被正确加密(还是某种较弱的保护)?

1
有一些工具,如SQLite加密扩展和SQLite Crypt,但两者都是非免费的,而我的项目是在GPL下运行的。我们还没有尝试过在.NET中使用它,但我是SQLCipher的开发团队成员,它基本上是SQLite的免费版本,提供透明的数据库加密。我建议在需要嵌入式数据库的移动和/或独立应用程序设置中使用它。 - Billy Gray
1
现在,SQLCipher的.NET版本也是一款商业产品 :( - Cocowalla
3个回答

23

1
链接已经失效了。你能提供新的链接吗? - Protocole
1
看起来自从2011年软件控制权转移到http://system.data.sqlite.org之后,Robert Simpson就放弃了phxsoftware网站。我不认为旧的论坛页面在其他任何地方发布过。 - Ed Power
2
以上链接的缓存版本http://web.archive.org/web/20130325100811/http://sqlite.phxsoftware.com/forums/t/130.aspx - Josh Anderson
版本113已经取消了SetPassword的支持。SEE是新的解决方案,尽管它需要手动编译并且花费2000美元。 - Bin4ry
@Bin4ry请查看此处获取更多信息:https://stackoverflow.com/a/72073407/8586332 - scooter

7

5

1
C#-SQLite 包含内置的 sqlcipher 支持;您可以使用 SQLITE_HAS_CODEC 进行编译,并使用 PRAGMA hexkey="0x0102030405060708090a0b0c0d0e0f10" 进行激活。 - Noah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接