首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在android中保护API密钥和URL安全的最好方法?

在android中保护API密钥和URL安全的最好方法?
EN

Stack Overflow用户
提问于 2015-11-25 14:15:42
回答 4查看 3.6K关注 0票数 2

我在我的android应用中使用了一些第三方API密钥和我的服务器URL。众所周知,任何人都可以很容易地对APK进行反向工程,并可能滥用细节。

我知道一些保证代码安全的方法。

程序混淆使关键字符串和URL保持不变。

将凭据保留在本机代码中。

有没有其他方法来保护敏感细节,如API密钥和URL的安全?

提前谢谢。欢迎任何类型的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2015-11-25 14:25:47

这是一个相当开放的问题,我们可以尽可能多地讨论。所有这一切将归结为一件事:如果你把你的产品给别人,那么他/她可以做任何级别的逆向工程。所以最好的方法是把它保存在服务器上,然后加密传输。如果你想把它放到你的apk中,那么最好的办法就是通过使用proguard或dexguard等混淆来使其难以阅读。

票数 2
EN

Stack Overflow用户

发布于 2015-11-25 14:55:15

一种可能的解决方案是加密应用程序中的数据,并在运行时使用解密来使用这些数据。我还建议使用程序来使反编译的应用程序难以阅读和理解。例如:

代码语言:javascript
运行
复制
// "the real string is: "mypassword" "; 
//encoded 2 times with an algorithm or you can encode with other algorithms too
public String getClientSecret() {
    return Utils.decode(Utils
            .decode("Ylhsd1lYTnpkMjl5WkE9PQ=="));
}

被保护应用的反编译源代码是这样的:

代码语言:javascript
运行
复制
 public String c()
 {
    return com.myrpoject.mypackage.g.h.a(com.myrpoject.mypackage.g.h.a("Ylhsd1lYTnpkMjl5WkE9PQ=="));
  }

至少对我来说已经够复杂的了。当我别无选择,只能在我的应用程序中存储值时,我就是这样做的。当然,我们都知道这不是最好的方法,但它对我来说很有效。

代码语言:javascript
运行
复制
/**
 * @param input
 * @return decoded string
 */
public static String decode(String input) {
    // Receiving side
    String text = "";
    try {
        byte[] data = Decoder.decode(input);
        text = new String(data, "UTF-8");
        return text;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return "Error";
}

反编译版本:

代码语言:javascript
运行
复制
 public static String a(String paramString)
  {
    try
    {
      str = new String(a.a(paramString), "UTF-8");
      return str;
    }
    catch (UnsupportedEncodingException localUnsupportedEncodingException)
    {
      while (true)
      {
        localUnsupportedEncodingException.printStackTrace();
        String str = "Error";
      }
    }
  }

你可以在google中找到这么多的加密器类。

票数 2
EN

Stack Overflow用户

发布于 2015-11-25 14:32:31

正如rockflight所说,也许是这样的。您可以尝试使用此命令

你的(移动或网络)客户端不应该包含你的Firebase的密码。在某种程度上,有人会对你的代码进行反向工程,提取密钥,并用这些能够读/写你的Firebase数据库中的所有数据。在此阶段,您唯一能够做的事情就是撤销Secret,这将使所有客户端都失败。

Firebase主机仅允许您存储静态资源。因此,虽然您可以将API密钥存储在Firebase的托管服务器上,但这对安全性没有太大帮助。它仍然是每个人都可以阅读的。

相反,您应该在客户端中使用常规的Firebase身份验证。

答案链接:How can I securely store and retrieve API Keys for an android application (written in native Java) using Firebase Hosting?

有用的链接

https://www.firebase.com/docs/android/guide/user-auth.html

https://github.com/firebase/firebase-login-demo-android

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33909650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档