2017-04-26 194 views
0

我怎么能像存储认证密钥API证书,谷歌地图API密钥安全,目前我已存储在strings.xml.KeygenratorSpec凭证要求的最低23 API级别是有什么办法可以安全地存储任何帮助会更有帮助我卡住了2天,但不知道。存储API证书安全

回答

0

简短的回答:你不能做到这一点。

较长的答案:你可以用混淆,从而使其难以找到API证书,但还是有人有足够的时间和几个技能会发现它并打破它。使用KeyGenerator也无济于事。我假设你打算加密/解密API凭证。您仍然需要将密钥存储在应用程序中或由您的应用程序检索。因此,同样的问题仍然存在,在访问您的凭证之前,只需要再找一个字符串。

混淆可能是你最好的机会。当然,这不是防弹的,但如果它足够复杂,它可能会延误或破坏试图破坏应用程序的人。您可以使用proguard来混淆您的应用程序代码(如果您不想支付更高级的东西),但不会混淆字符串。你将不得不使用其他技术。你可以在网上找到大量的例子,你也可以使用自己的模糊层次。我不认为你会找到任何好的建议或标准来做到这一点。当然,不管你尝试多么努力,对于某个人来说,回归仍然是一个时间问题。

编辑:

这是配置proguard的一个很好的教程:http://wiebe-elsinga.com/blog/obfuscating-for-android-with-proguard/(小心你有,否则,当你生成一个APK你可能会崩溃)

关于字符串混淆,你可以使用类似于此的:https://github.com/efraespada/AndroidStringObfuscator但是,您仍然需要一些密码,因此解密将成为可能。如果将现有字符串与代码混淆结合使用,则将现有字符串用作密码(您已在应用程序中使用该字符串)。在各种文件/资源​​中隐藏部分字符串,并在想要创建字符串时将它们组合起来可能会增加更多混淆。但是,如果你让它太复杂,可能很容易发现。例如,如果您的strings.xml仅包含1个加密字符串(不可读),则很可能这是您尝试保护的字符串。之后会导致这些信息。所以,在我看来,没有最好的/好的做法。您可以通过网上找得到的一些想法,但我会建议你自己判断哪里是最好的(不太明显)的方式来隐藏它,这取决于你的代码和应用程​​序结构。但无论如何,这只会欺骗没有经验/懒惰的攻击者和自动化工具。

我经常做的另一件事是不允许的代码的某些部分如果启用调试运行时,或者当apk文件不会被自己的签名。这些对策也不是防弹的,但可能会使懒惰的攻击者失去活力。这里是一个很好的指导如何做到这一点和其他事情:https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app

+0

@ jackgu1988你可以请提供任何示例链接,如果你有 –

+0

@HardikMehta请检查更新的答案 – jackgu1988