0

我正在使用 ZeosDB 组件来访问 sqlite 数据库。它在未加密的数据库上运行良好。

在加密的数据库上,我收到:文件是否加密或不是数据库。即使我设置了密码。

我使用的 DLL 文件是否错误?我使用的是官方页面的最后一个dll。它默认不支持加密吗?

4

2 回答 2

4

SQLite3 上有几种加密方案

其中,您有:

  • SQLite3作者的官方非免费加密库,名为SQLite Encryption Extension (SEE):只需付费使用dll,修改初始化设置数据库密钥;
  • 开源SQLCipher
  • WXSQlite3包装器;
  • 对于 Delphi,我们的 mORMot 中包含我们的开源静态链接版本(带有自定义加密) - 静态链接允许您不使用外部链接,sqlite3.dll因此有助于简化部署和支持 - 它具有轻松切换到 MS SQL、Oracle 的特点或 OleDB/ODBC 与从 Delphi 5 到 XE3 的相同源代码,并且速度快
  • 请参阅上面的链接。

ZeosDB SQLite3 级别不处理它们。

SQlite3 API 驱动程序(单元 ZPlainSqLiteDriver)不包含密码。所以你将不得不改变它。或者切换到另一个支持加密 API 的包装器。

于 2012-11-26T08:33:17.250 回答
3

最近我遇到了同样的问题(使用 UniDac)。官方 DLL 不支持加密。有几个库包含加密,但它们不可互换。即用一个 SQLite DLL 加密的 DB 不能用另一个发行版解密。我认为你的情况是一样的。

我的解决方案是:

  • 为 .NET下载了...static bunde... 包 (x86, x64) - 这支持加密(我认为是 Windows DPAPI)
  • 将 System.Data.SQLite.dll 重命名为 SQLite3.dll -> 此 DLL 是本机 DLL 并支持 enc/dec
  • 在我的 DBMS 的文件夹中,我将 SQLite DLL 替换为上面提取的

这样,DBMS 使用新的 DLL 进行加密,您的程序可以使用相同版本的 DLL 对其进行解密。

你也可以看看:

笔记:

  • 还要确保将 SQLite3.dll 复制到程序目录。许多其他产品使用 SQLite 并且位于 %PATH% 中,因此无法保证您的可执行文件会加载“正确的”SQLite3.dll。可以在这里找到有趣的解决方案
  • 查阅许可证以查看是否可以免费使用 .NET 版本,因为.
于 2012-11-26T08:32:52.220 回答