sqlcipher_export失败时如何解密SQLCipher数据库

How to decrypt SQLCipher database when sqlcipher_export fails

我正在尝试解密 SQLCipher 数据库以使用查看器应用程序查看它,当我使用命令行工具按照所述进行操作时购买 in here:

>sqlcipher encrypted.db
sqlite> pragma key = 'key';
sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';
sqlite> SELECT sqlcipher_export('plaintext');

我收到错误:

Error: no such collation sequence: COLLATION_NAME

而plaintext.db只有一个空的table。

有没有其他方法可以解密数据库?

好吧,SQLite 具有此处概述的便捷备份功能:https://www.sqlite.org/backup.html

您可以在命令行工具中通过 .backup 特殊命令使用它(请参阅此处的帮助:https://www.sqlite.org/cli.html)。它在 sqlcipher 命令行工具中工作并因此生成未加密的数据库。

解密数据库的方法如下:

>sqlcipher encrypted.db
sqlite> pragma key = 'key';
sqlite> .backup plaintext.db

当然,您也可以通过加载数据库并使用在第一个 link(滚动到 "Example 2: Online Backup of a Running Database" 部分)找到的备份 API 以编程方式完成,但我没有探索这个选项。

你的数据库是在Android平台上生成的吗?如果是这样,它可能正在使用来自 ICU 的排序规则,该排序规则链接到 Android 的 SQLCipher。 SQLCipher 命令行工具的基本构建 instructions 不包括包含 ICU 的步骤。您可能会发现在 Android 设备上执行 sqlcipher_export(…) 以利用 ICU 的存在更容易。