【问题标题】:SQLite - Creating encrypted databases. How the...?SQLite - 创建加密数据库。怎么……?
【发布时间】:2011-01-26 02:34:09
【问题描述】:

如何创建一个加密的 SQLite 数据库,该数据库实际上保持加密状态或之后可以打开。

我使用“可以”创建加密数据库的 SQLite2009 Pro Enterprise Manager,但在输入加密密钥后,它们不再可打开。

我使用 SQLabs 中的 SQLiteManager 创建了一个加密数据库,虽然这个数据库可以在之后打开,但可以通过任何 SQLite 管理工具或代码来完成,而不需要我输入的密钥。

那么,请问你怎么能创建一个加密的 SQLite 数据库呢?

我计划在 Adob​​e Flex 应用程序中使用该数据库。

谢谢。

【问题讨论】:

  • SQLite2009 是编写 SQLite 的公司销售的产品吗?因为我知道他们有一个。而且,如果这不起作用,我会就问题与他们联系,而不是重新开始。
  • 我不确定,它似乎是由一个叫 Osen Kusnadi 的人写的(没有搜索他的名字)。但我不会感到惊讶,它似乎总是在 sqlite.org 网站上的第一批推荐之一。从 2010 年到今天,我一直在尝试那个特定的应用程序,但加密的东西从来没有用过。

标签: database apache-flex sqlite encryption


【解决方案1】:

SQLite 支持集成加密,但默认的开源 SQLite 发行版不支持加密。如果 SQLite 的加密版本都使用相同的加密扩展,则它们只能在不同的客户端或工具之间移植。

SQLite 开发人员自己分发了支持透明加密的商业版本的 SQLite。当此模块用于加密时,加密跨平台工作,写入文件的每个字节都被加密。存储在磁盘上的加密 SQLite 文件中没有任何内容表明它是 SQLite 数据库。许多工具通过允许您放入商业 sqlite.dll 文件来代替开源文件来支持此实现。

还有支持加密的第三方扩展。例如,System.Data.SQLite 支持加密,但使用 .NET 库来执行此操作,因此加密的 System.Data.SQLite 只能由另一个也使用 System.Data.SQLite 的客户端读取(这是故意的,出于尊重核心 SQLite 开发人员及其商业产品)。

Adobe AIR 1.5 支持加密。我不确定使用哪种机制,但我搜索并找不到答案。 AIR 加密数据库可能只能使用 AIR 读取。无论哪种方式我都不确定。但是,AIR 是学习使用加密数据库的一个很好的起点:

http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/

【讨论】:

  • 非常感谢,塞缪尔。在加密 SQLite 数据库时,我不知道事情是如何运作的。我知道 AIR 支持这一点,但认为这是“普遍的”。出于好奇,当数据库中已经包含各种数据时,是否可以在创建后未加密的数据库中进行加密?
  • @Francisc,不,数据库无法从加密转换为非加密。但是,您可以连接到一个数据库,转储它,然后连接到一个空白数据库,然后导入之前的转储。通过该机制,您可以有效地从加密转换为非加密,但它是间接的。
  • 你说“从加密到非加密”,你的意思是反过来吗?谢谢。
  • @Francisc,我的意思是双向的。您必须在创建数据库之前将其设置为加密(或保持未加密)。创建后,您必须转储/加载数据库以将其从加密更改为非加密或从非加密更改为加密。
  • @Francis:例如,SQLCipher 提供了一些简单的实用程序(src 代码)来做这件事——添加/删除数据库文件的加密。如果您查看源代码,您会发现它相当琐碎。
【解决方案2】:

Re:加密现有数据库

“出于好奇,如果数据库中已经包含各种数据,是否可以在创建后未加密的数据库中进行加密?”

您不能直接加密未加密的数据库。您可以使用 SQLConnection.reencrypt() 方法更改数据库的加密密钥,但它仅适用于已加密的数据库:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/data/SQLConnection.html#reencrypt()

但是,作为一种解决方法,您可以在单个 SQLConnection 中打开多个数据库,并且可以将数据和结构从一个复制到另一个。我实际上已经编写了一个实用程序类,它使用该技术允许您加密未加密的数据库:

https://github.com/probertson/air-sqlite/blob/DB-copy-dev/src/com/probertson/data/DBCopier.as

【讨论】:

  • 很好的答案,我希望我能将 2 个答案标记为正确。谢谢。
  • 如果你有加密扩展的源代码,你可以。 SQLCipher 提供了这样的源代码。 System.Data.sqlite 也可以这样做。这真的很容易。
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2014-08-25
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多