我有过反向工程的经验,人们可以在Android中流畅地访问您的数据库。 我想知道有什么方法可以在创建时只加密我的数据库(不会混淆整个apk),然后在RunTime期间我会使用我的数据库。
我对数据库知之甚少,所以任何建议都可以像保护资产文件夹中的数据库一样。
答案 0 :(得分:5)
当然你可以做到。使用SQL Cipher。
使用android.database.sqlite.SQLiteDatabase
时,不使用传统的info.guardianproject.database.sqlcipher.SQLiteDatabase
,而是使用{{1}}。有关详细信息,请查看this question。
答案 1 :(得分:1)
您无法保护应用中包含的信息。这是不可能的。
攻击者可以撤消所有代码。
攻击者可以对您的所有代码进行反混淆处理。
可以使用存储在应用程序上的密钥对预加载的加密DB文件进行解密。
特别是在这样的代码中:
String dbPath = this.getDatabasePath("Encrypted.db").getPath();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
**DATABASEKEY**, null);
SQLCipher不是为了保护用户数据免受攻击者攻击,而是为了保护用户数据免受其他应用程序攻击。
您的努力会使攻击者略微减速。
如果您想要应用程序上的敏感数据,请不要将其存储在应用程序或数据目录中。设计您的应用程序以与服务器进行通信,尽管这会带来其他一些需要考虑的事情(Web App Security)。
答案 2 :(得分:0)
也许更加可行的是加密存储在表中的字符串而不是整个表。例如存储hash密码而不是直接存储它们。
答案 3 :(得分:0)