【问题标题】:Android - Best way to hide API clientId & clientSecretAndroid - 隐藏 API clientId 和 clientSecret 的最佳方式
【发布时间】:2017-11-07 20:29:13
【问题描述】:

我想就隐藏 API 密钥和密钥的最佳方式征求您的意见。

我找到了两种方法:

我知道风险 0 不存在,但最安全的解决方案是什么?

提前致谢

【问题讨论】:

  • 问题是你想向谁隐藏密钥?第一种 ndk 方法有助于在逆向工程时更难找到密钥,第二种 gradle 方法有助于在共享源代码时将密钥保存在本地,在我看来你是在比较苹果和橘子
  • 是的,我想让逆向工程变得更加困难。我认为gradle也允许这样做。谢谢你的解释

标签: android security gradle android-ndk android-security


【解决方案1】:

NDK 似乎是您最好的选择,虽然它不是 100% 安全的,但它确实很难进行逆向工程。 gradle 方式似乎一点也不安全。

出于混淆和加密目的,您还可以利用DexGuard

【讨论】:

  • 感谢您的回答。我将使用 NDK。听说过 DexGuard,如果我没记错的话,没有免费版本(proguard 除外)
  • 不客气。不要忘记对给出的有用答案进行投票,并接受对您最有帮助的答案作为正确答案。
  • 如果不是 ndk,则可以按照此链接中的说明使用密码来完成您的工作:stackoverflow.com/questions/43629251/…
  • 正如我的回答中所解释的,我们有一个免费的 Dexguard 替代品来隐藏 Android 中的密钥:github.com/klaxit/hidden-secrets-gradle-plugin
【解决方案2】:

为了在 Android 应用程序中隐藏密钥,我们开发了 Dexguard 的免费开源替代方案。我们的 hidden-secrets-gradle-plugin 使用 NDK 和 XOR 运算符来混淆密钥以防止逆向工程。

您可以选择提供自定义编码/解码算法来提高密钥的安全性。

访问插件和所有详细信息:https://github.com/klaxit/hidden-secrets-gradle-plugin

【讨论】:

    【解决方案3】:

    保护密钥的最佳方法是不要将密钥放在应用程序中,为此,如果您使用的是高度安全的服务器(例如亚马逊服务器),那么请将您的密钥放在服务器上并在运行时访问它们。并且还在应用程序和服务器端应用公共/私有加密。

    但是,如果您想继续使用应用程序,那么使用“NDK”或使用“Proguard”两者都是应用程序级别的高度安全机制。

    【讨论】:

    • 是的,我使用安全服务器和 https。但是我不明白这种方法是黑客可以发出相同的请求来检索密钥。
    • 不是说只是将api密钥保存在服务器上,您还必须使用“公共/私有API密钥加密”。查看此博客并查看“公共/私有API密钥交换”部分,希望它会澄清:androidauthority.com/how-to-hide-your-api-key-in-android-600583
    • 我仔细阅读了您的文章,但仍然无法理解您的兴趣。如果黑客了解 API 的工作原理并检索到公钥(存储在应用程序中),它也可以使用它。之后,可以将密钥链接到用户,但基本上它提供与 OAuth 相同的安全性?
    【解决方案4】:

    如果您使用 oAuth 获取令牌,您可以在服务器上使用客户端 ID 和客户端密码设置服务器。您的应用程序从您的服务器获取 oAuth 令牌。这样您就不必将客户端 ID 或客户端密码放入用户下载和运行的应用程序中。

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2014-08-05
      • 2020-01-27
      • 2014-09-03
      • 2011-12-25
      • 1970-01-01
      • 2012-08-01
      • 2021-07-21
      • 1970-01-01
      相关资源
      最近更新 更多