如何在Assets文件夹中保护我的数据库sqlite(通过加密)?

时间:2012-03-05 07:57:46

标签: android sqlite sqlcipher

我有过反向工程的经验,人们可以在Android中流畅地访问您的数据库。 我想知道有什么方法可以在创建时只加密我的数据库(不会混淆整个apk),然后在RunTime期间我会使用我的数据库。

我对数据库知之甚少,所以任何建议都可以像保护资产文件夹中的数据库一样。

4 个答案:

答案 0 :(得分:5)

当然你可以做到。使用SQL Cipher

使用android.database.sqlite.SQLiteDatabase时,不使用传统的info.guardianproject.database.sqlcipher.SQLiteDatabase,而是使用{{1}}。有关详细信息,请查看this question

答案 1 :(得分:1)

您无法保护应用中包含的信息。这是不可能的。

  1. 攻击者可以撤消所有代码。

  2. 攻击者可以对您的所有代码进行反混淆处理。

  3. 可以使用存储在应用程序上的密钥对预加载的加密DB文件进行解密。

  4. 特别是在这样的代码中:

    String dbPath = this.getDatabasePath("Encrypted.db").getPath();
    
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
                    **DATABASEKEY**, null);
    

    SQLCipher不是为了保护用户数据免受攻击者攻击,而是为了保护用户数据免受其他应用程序攻击。

    您的努力会使攻击者略微减速。

    如果您想要应用程序上的敏感数据,请不要将其存储在应用程序或数据目录中。设计您的应用程序以与服务器进行通信,尽管这会带来其他一些需要考虑的事情(Web App Security)。

答案 2 :(得分:0)

也许更加可行的是加密存储在表中的字符串而不是整个表。例如存储hash密码而不是直接存储它们。

答案 3 :(得分:0)

你看过Proguard了吗?

  

ProGuard工具通过缩小,优化和混淆代码   删除未使用的代码并重命名类,字段和方法   语义晦涩的名字。结果是一个较小的.apk文件   逆向工程更难。因为ProGuard制作   你的申请难以逆向工程

有关proguard的更多信息。