Android:在我的Java代码中放入敏感字符串是否安全?

时间:2014-07-17 14:01:03

标签: java android encryption proguard code-access-security

我的应用程序使用了许多我无法让用户看到的API密钥和URL。我一直将它们直接放在代码中,有时嵌入在使用它们的方法中,有时也在一个名为MyVals的类中,它存储常用的字符串和数字。

e.g:

public class MyVals {

    private LGVals(){}

    public static final String DB_URL = "https://mydb.dbprovider.org/";
    public static final String DB_Key = "klJF*(oh8iyhkkde";
    public static final String TableKey_UserList = "o9w6owifhayf98fnwihj";

}

这样安全吗?如果我用Proguard创建我的APK会有所不同吗?对此最好的做法是什么?

2 个答案:

答案 0 :(得分:5)

将敏感字符串嵌入代码中绝对安全。 Proguard模糊了类和方法名称,但任何已定义的字符串都保持完全不变。这是我通过Proguard运行的应用程序的一个示例。您可以看到方法和类名称是混淆的,但字符串(必须是)保持不变。

以下是原始代码:

public void shutdown() {
    if (logger.logDebug()) {
        logger.logDebug(LOGTAG, "Queuing shutdown message ...");
    }

    queueMessage(new BaseMessage(true));
}

混淆的代码,很容易通过JD-GUI获得:

  public void c()
  {
    if (c.logDebug())
      c.logDebug("MsgRouter", "Queuing shutdown message ...");
    a(new a(true));
  }

如果您在应用中的字符串中嵌入了敏感数据, 就可以并将对其进行反编译

答案 1 :(得分:-5)

不,这不安全。

您至少应该将信息放入SharedPreferences。

但是,任何拥有root访问权限的人都可以阅读它们。