我需要隐藏密码才能与服务器连接。问题是密码是由服务提供商提供的,所以它是静态的。
我已经考虑过使用钥匙串,但问题是即使我使用它,我也需要对密码进行硬编码,将其插入代码中某处的钥匙串中。
那么,有没有办法隐藏我的应用程序可用的静态密码,避免在我的代码中写入?
答案 0 :(得分:1)
我会考虑在您的应用用户和服务提供商之间设置一个中间层服务器 - 一种代理。它将允许您:
这需要更多努力,但从长远来看可能更有利。
答案 1 :(得分:1)
这不是一个可解决的问题,并且已经在SO周围详细讨论过。对于包含指向其他几个人的链接的“中心”问题,请参阅Secure https encryption for iPhone app to webpage。
使用默默无闻并不是一件可怕的事情。但要保持简单。使用一些随机密钥对值进行异或。完成。放置越来越多的图层不会给你带来任何损失,并且会降低你的复杂性(这意味着时间和错误,这是利润和安全的敌人)。如果有人在您的代码上放置调试器,他们只会记录您发送到服务器的所有数据,因此您跳过的所有箍都隐藏了您计算密码的方式并不重要,因为最终您必须发送它到服务器。因此,请简单地阻止人们使用“字符串”将其拉出来,并认识到您无法停止调试器。
保护服务提供商密钥的唯一方法是将该密钥放在您的服务器上,然后在对用户进行身份验证后代理该服务。如果你把它放在代码中,那么它是可发现的,期间。如果这是一个可以解决的问题,那么就没有未经许可的软件副本,没有未经许可的音乐副本,没有iPhone的越狱等等。如果Apple在从硬件到控制系统的每个部分时都无法停止逆向工程操作系统,你不会在应用程序中修复它。
您应该考虑的是如何在密钥丢失时恢复。你怎么发现它发生了?你如何使该密钥到期并创建一个新密钥?如果你在代码中发送密钥,你必须假设它最终会被发现,你应该有一个处理它的计划。
作为旁注,我过去使用的一种技术是按需从我们的服务器下载密钥,而不是在应用程序的任何位置对其进行编码。我们使用经过身份验证的HTTPS并检查我们的证书当然,仍然可以欺骗这个系统(它总是可以欺骗一个系统,它给客户提供他们应该以某种方式使用的信息),但是思考至少我们可以这样更容易地改变关键如果密钥泄漏,请暂时阻止潮流。
答案 2 :(得分:0)
这是钥匙和盒子的问题,你可以每次把你的钥匙放在一个新的盒子里,然后把钥匙藏在一个新的盒子里,你可以继续这样做....但最后你总是有最后一把钥匙......无处可藏。
我个人会混淆钥匙串的钥匙,并隐藏钥匙串中的真钥。 如果这是一个非常重要的秘密,您可以使用AES加密密钥,但是再次使用加密密钥,在这里您可以使用设备特定的内容而不是硬编码值,并从该属性中生成密钥。 / p>
肯定不是完美但在大多数情况下都会完成工作。