【发布时间】:2012-03-05 07:57:46
【问题描述】:
我有过逆向工程的经验,并且人们可以在 android 中流畅地访问您的数据库。 我想知道有什么方法可以在创建时仅加密我的数据库(不混淆整个 apk),然后在运行时我会使用我的数据库。
我对数据库的了解较少,因此任何建议都可以保护我在资产文件夹中的数据库。
【问题讨论】:
我有过逆向工程的经验,并且人们可以在 android 中流畅地访问您的数据库。 我想知道有什么方法可以在创建时仅加密我的数据库(不混淆整个 apk),然后在运行时我会使用我的数据库。
我对数据库的了解较少,因此任何建议都可以保护我在资产文件夹中的数据库。
【问题讨论】:
你当然可以。使用SQL Cipher。
使用时,请使用info.guardianproject.database.sqlcipher.SQLiteDatabase,而不是使用传统的android.database.sqlite.SQLiteDatabase。欲了解更多信息,请查看this question。
【讨论】:
您无法保护应用程序中包含的信息。这是不可能的。
攻击者可以反转您的所有代码。
攻击者可以反混淆您的所有代码。
可以使用存储在应用程序上的密钥对预加载的加密数据库文件进行解密。
尤其是这样的代码:
String dbPath = this.getDatabasePath("Encrypted.db").getPath();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
**DATABASEKEY**, null);
SQLCipher 并非旨在保护用户数据免受攻击者的侵害,而是用于保护用户数据免受其他应用程序的侵害。
你的努力会稍微减慢攻击者的速度。
如果您想在 App 上存储敏感数据,请不要将其存储在 App 或数据目录中。将您的应用设计为与服务器通信,尽管这会带来一大堆其他事情需要考虑(Web 应用安全)。
【讨论】:
也许对您存储在表中而不是整个表中的字符串进行加密会更可行。例如存储密码的hash,而不是直接存储它们..
【讨论】: