如何在android中解密SQLCipher加密文件?

时间:2013-03-13 10:02:14

标签: android encryption sqlcipher

我在android中使用SQLCipher开发了应用程序。这是保护数据库文件到应用程序的安全方法。它适用于加密,但我希望解密加密的DB文件,并希望查看SQLite浏览器。

实际上我有很多表及其数据可用。现在,如果我想查看加密的数据库数据,就无法查看它(只有可用于查看数据的日志)。但是使用SQLite浏览器我看不到它。

我正在使用“info.guardianproject.database.sqlcipher.SQLiteDatabase”

我已经尝试了很多方法来解密它并查看SQLite浏览器,但是它给出了错误“An Error Occured:file is not a sqlite3 database”。

任何人都可以帮我解密加密的DB文件。

或者我应该复制加密数据库文件并使用“info.guardianproject.database.sqlcipher.SQLiteDatabase”对其进行解密,然后使用它来查看所有表格。

谢谢,

Mishal Shah

5 个答案:

答案 0 :(得分:5)

我通过从设备中提取数据库并对其进行解密来解决此问题。下面的脚本将生成一个解密的数据库文件。可以使用SQLite-viewer打开此文件。

decrypt.sh

#!/bin/bash
# Bashscript to decrypt databases

echo "pull db from device.."
adb pull /data/data/com.example/databases/database.db

echo "removing previous decrypted db, if existent.."
rm -r decrypted_database.db

echo "decrypting database.db into decrypted_database.db"
sqlcipher -line database.db 'PRAGMA key = "encryption_key";ATTACH DATABASE "decrypted_database.db" AS decrypted_database KEY "";SELECT sqlcipher_export("decrypted_database");DETACH DATABASE decrypted_database;'

应该在你的路径中:

替换脚本:

  • com.example 与您的包名
  • database.db ,名称为databasefile
  • encryption_key ,加密密码

注意: 设备应该扎根

答案 1 :(得分:2)

您需要使用具有SQLCipher扩展的SQLite实用程序作为其一部分。您可以download and build the SQLCipher code on Linux,它可以为您提供可用于访问数据库的sqlite3实用程序(使用适当的PRAGMA语句来指定密码等。)

答案 2 :(得分:0)

decrypt.sh脚本帮助了我一段时间。但过了一段时间后,我发现SQLiteManager开始支持SQLCipher加密数据库。它有一个漂亮的用户界面。即使它不是免费的,你仍然需要从设备中提取数据库文件,我认为这很好。

答案 3 :(得分:0)

之后的Android应用程序代码中

dbHelper.getReadableDatabase(DBKEY); 数据库文件将被解密..通过将文件复制代码复制数据库文件写入某些外部SD卡文件路径并使用任何sqllite工具打开它

答案 4 :(得分:-1)

Gnome的GDA可以做到这一点。下载here