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

时间:2015-04-15 17:13:34

标签: sqlite encryption sqlcipher

我正在尝试解密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只有一个空表。

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

2 个答案:

答案 0 :(得分:0)

嗯,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

当然,您也可以通过加载数据库并使用第一个链接中的备份API(滚动到"示例2:正在运行的数据库的在线备份"部分)以编程方式执行此操作,但是我没有探索这个选项。

答案 1 :(得分:0)

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