如何保护 API 密钥? [复制]

Posted

技术标签:

【中文标题】如何保护 API 密钥? [复制]【英文标题】:How protect an API key? [duplicate] 【发布时间】:2018-06-30 09:44:57 【问题描述】:

我正在开发有 api(restful)的项目

我在resful中使用key并在app中使用

但是如果有人可以反编译我的应用程序并查看 api 密钥,那么可以破解我的 api

有没有办法保护 api 密钥或使用 api 密钥而不存储在应用程序中?

【问题讨论】:

这能回答你的问题吗? Best practice for storing and protecting private API keys in applications 【参考方案1】:

通常,Google 将密钥存储到 android Manifest 或 string.xml(res 文件)中。这两个文件可以像任何其他文件一样被反编译。我认为KeyStore 通常是存储私钥的好习惯,所以请看一下 KeyStore 类以及如何使用它。

你也可以在github上找到关于这个主题的不错的文章

【讨论】:

谢谢,我使用来自私有签名密钥的哈希来加密数据并发送到 api,这是个好方法吗? 对不起,如果我没有理解你的意思,你散列你的私钥然后将它发送到服务器?在那种情况下,为什么有很多连击解决方案:) 顺便说一句,使用 https 总是很好的想法。 No 不,我使用私有签名密钥 sha1 或 md5 作为 api 密钥,这是不好的方法吗?我认为如果我使用符号哈希,黑客就无法破解它:))) 不,没关系,只要您为所使用的算法使用令人满意的密钥长度。只是可能使用 sha1,因为不推荐使用 md5 :) 而且我再次建议您设置 https,有免费的让我们加密 https 提供程序 :) 如果您只将数据从手机发送到服务器,您也可以使用 RSA。在这种情况下,您将使用服务器的公钥加密并使用服务器的私钥解密。【参考方案2】:

您无法完全保护嵌入在应用中的静态 API 密钥。逆向工程工具可以很容易地提取它,但你可以让生活变得更加困难,这将是在你的 API 数据的价值、你想要花费多少时间/精力来保护它以及攻击者的动机之间进行权衡。

密钥库可用于保护动态会话密钥,但不能用于保护静态 API 密钥,并且在许多低端设备上没有硬件支持,因此请检查您的客户群。

!以下与商业产品有关!

除了之前链接的示例之外,还可以在此处找到一些密钥和 API 保护示例。

https://github.com/approov

【讨论】:

以上是关于如何保护 API 密钥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Android 应用程序中的 Azure 翻译 API 密钥

如何使用 API 密钥和秘密保护 Spring Boot API

如何从 APK 反编译中保护 Fabric API 密钥?

您如何保护 API 密钥和第 3 方站点凭据 (LAMP)?

如何在没有弹簧安全的情况下使用 api 密钥保护 rest api

通过 token/api 密钥保护 API