Android,如何保留本地加密数据库的密钥以供离线应用?

时间:2016-02-22 07:40:56

标签: android database sqlite encryption

我正在编写简单的离线词典应用程序。所有数据都存储在SQLite数据库中。

如果我们假设数据库已加密,那么app必须使用某种 recyclerView= (RecyclerView) layout.findViewById(R.id.your_recyclerview_id); 才能访问它。此外,我们假设此应用程序完全key,并且不能访问任何远程服务器。

这意味着offline将存储在apllication本身中。我试图在应用程序中找到很多隐藏此key的方法,并且所有方法都存在缺陷。

是否可以在应用程序本身中隐式隐藏此key

1 个答案:

答案 0 :(得分:1)

如果应用自动显示数据,则无法保护该数据。

您的应用必须将密钥存储在某处。无论您尝试对代码进行模糊处理多少,仍然可以对其进行反编译(或者只是执行模糊处理的部分,直到密钥出现为止)。

或者以不同的方式看待它:隐藏密钥是一种加密形式。所以现在你需要一个第二个密钥来加密/解密第一个密钥。 (但是通过混淆,'密钥'是程序结构,它不如真正的加密算法安全。)

保护数据的唯一方法是避免存储密钥,方法是要求用户在使用应用程序时输入密钥(作为密码或某些单独的令牌)。 这意味着信任用户不会放弃密钥。