我刚开始学习编码。提供示例代码将非常棒。
我使用Firebase开发了一个简单的Android应用程序(本机Java)。我有几个API密钥硬编码到我的应用程序的资源中。我读到最好将这些密钥存储在服务器上。我目前没有自己的域名或服务器,但我有兴趣使用Firebase托管来存储这些API密钥。
我很感激帮助建立通过Firebase Hosting存储和检索这些API密钥的基础。如果它们简单而安全,我愿意接受其他建议。
谢谢!
答案 0 :(得分:3)
您的(移动或网络)客户端不应包含Firebase的密钥。在某些时候,有人会对您的代码进行反向工程,提取秘密,并且能够读取/写入Firebase数据库中的所有数据。你在那个阶段唯一可以做的就是撤销秘密,这将使所有客户失败。
Firebase托管允许您仅存储静态资源。因此,虽然您可以将您的API密钥存储在Firebase的托管服务器上,但它对安全性的帮助不大。它仍然可以被所有人阅读。
您应该做的是在客户端中使用常规Firebase身份验证。 Firebase's guide for user authentication on Android中介绍了这一点。可以在Firebase Login Demo for Android中找到一个很好的例子。
答案 1 :(得分:-1)
您可以加密API密钥和其他敏感数据。 Here是一篇很棒的文章。最敏感的是密码,它将用于对称密钥生成。重要的是(是的,同样的问题),不要在代码中硬编码这个密码,而是在运行时计算它。计算的一个好部分是APK的证书数据(Retrieve the apk signature at runtime for Android)。这可能会使逆向工程师的工作变得更加困难。但动态分析将帮助他/她获得一个秘密密钥。
服务器端计算技术在这里也非常有用,特别是与之前的建议相结合。
因此,密钥的一部分在运行时生成,另一部分在成功的用户认证之后从服务器接收。只是一个例子。
但最简单的方法是使用支持字符串/ dex字节码加密的商业混淆器,如DexProtector
N.B。我隶属于Licel(DexProtector的开发人员)