Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在objective c中混淆静态密码?_Objective C_Security_Passwords - Fatal编程技术网

Objective c 如何在objective c中混淆静态密码?

Objective c 如何在objective c中混淆静态密码?,objective-c,security,passwords,Objective C,Security,Passwords,我需要隐藏与服务器连接的密码。问题在于,密码是由服务提供商提供的,因此它是静态的 我已经考虑过使用钥匙链,但问题是,即使我使用它,我也需要硬编码密码以将其插入密码中钥匙链的某个位置 那么,有没有办法隐藏我的应用程序可用的静态密码,避免将其写入我的代码中?这是钥匙和盒子的问题,你可以每次都把钥匙放在一个新盒子里,然后把钥匙藏在一个新盒子里,你可以继续这样做。。。。但最终你总是拥有最后一把钥匙。。。无处藏身 就我个人而言,我会混淆钥匙链的钥匙,并将真正的钥匙隐藏在钥匙链中。 如果这是一个非常重要的秘

我需要隐藏与服务器连接的密码。问题在于,密码是由服务提供商提供的,因此它是静态的

我已经考虑过使用钥匙链,但问题是,即使我使用它,我也需要硬编码密码以将其插入密码中钥匙链的某个位置


那么,有没有办法隐藏我的应用程序可用的静态密码,避免将其写入我的代码中?

这是钥匙和盒子的问题,你可以每次都把钥匙放在一个新盒子里,然后把钥匙藏在一个新盒子里,你可以继续这样做。。。。但最终你总是拥有最后一把钥匙。。。无处藏身

就我个人而言,我会混淆钥匙链的钥匙,并将真正的钥匙隐藏在钥匙链中。 如果这是一个非常重要的秘密,您可以使用AES加密您的密钥,但是您的加密密钥仍然存在,在这里,您可以使用特定于设备的内容,而不是硬编码的值,并从该属性生成密钥


当然不是十全十美的,但在大多数情况下都可以做到。

我会考虑在应用程序用户和服务提供商之间设置一个中间层服务器,一种代理。它将允许您:

  • 为每个用户设置不同的密码
  • (可选)为用户提供更改密码的机会
  • 对谁使用服务以及传输什么数据有更多的控制
  • 更加独立于您的服务提供商(如随时更改)

这将需要更多的努力,但从长远来看可能更有利。

这不是一个可解决的问题,因此已经进行了详细讨论。有关一个包含多个其他问题链接的“中心”问题,请参阅

使用默默无闻并不是一件可怕的事情。但要保持简单。使用某个随机键对值进行异或运算。完成。放置越来越多的层不会给你带来任何好处,也会增加复杂性(这意味着时间和漏洞,它们是利润和安全的敌人)。如果有人在你的代码上安装了调试器,他们只会记录你发送到服务器的所有数据,因此你为了隐藏你如何计算密码而跳过的所有环都无关紧要,因为最终你必须将密码发送到服务器。因此,要简单地阻止人们仅仅使用“字符串”将其拉出,并认识到您无法停止调试器

保护服务提供商密钥的唯一方法是将该密钥放在服务器上,然后在对用户进行身份验证后代理该服务。如果你把它放在代码中,那么它是可发现的,句号。如果这是一个可解决的问题,那么就不会有未经许可的软件拷贝、音乐拷贝、iPhone越狱等。如果苹果在控制从硬件到操作系统的每一部分时都无法停止反向工程,你就不会在应用程序中修复它

您应该考虑的是如何在钥匙丢失时恢复。你是怎么发现事情发生的?如何使该密钥过期并创建一个新密钥?如果要在代码中发送密钥,必须假设它最终会被发现,并且应该有一个处理它的计划


顺便说一句,我过去使用的一种技术是按需从服务器下载密钥,而不是在应用程序中的任何位置对其进行编码。我们使用经过身份验证的HTTPS并检查我们的证书。当然,仍然有可能愚弄这个系统(愚弄一个向客户提供信息的系统总是有可能的,他们只应该使用特定的方式),但我们的想法是,至少我们可以通过这种方式更容易地更改密钥,以便在密钥泄漏时短暂阻止潮流。

您可能想要比这更复杂的东西,因为有人可以在你的应用程序和服务器之间放置一个代理,获取HTTP请求上的密码。请看,有很多方法可以做到这一点——当然,从安全角度来看,所有这些方法都很差,因为它们都涉及“隐蔽性安全”。通常,您将代码存储在各处的小部分中,然后使用一些名称模糊的方法(如“logEspressionSyntaxError”)将它们混合在一起(这反过来会级联到2-3个其他模糊的方法)。@marcelofbri-协议可以加密密码。服务提供商可能已经定义了这样做的协议。当然,请确保不要直接从需要密码的代码调用“隐藏”密码函数,而是使用迂回的路径,将密码提取到一些“不相关”的代码中,并缓存在一些“不明显”的代码中真正的密码使用者可以获取的地方。他的问题是他必须在代码中嵌入硬编码密钥,以便在安装应用程序时出现。让服务提供商提出更好的密码方案更为实际。我不同意;代理层提供了许多好处,让您可以控制交互。这是我推荐的解决方案。要求服务提供商这样做意味着每个用户都必须有一种方法来对服务提供商和您进行身份验证,这是一个难以扩展的问题。您最终需要OAuth或Kerberos之类的东西,它们比代理更复杂。