43

我正在为 Mac OS X 创建一个 Twitter 客户端,并且我有一个消费者机密。据我了解,我不应该分享这个密钥。问题是当我将它作为字符串文字放入我的应用程序并使用它时,如下所示:

#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW"

[[QQTwitterEngine alloc] initWithConsumerKey:QQTwitterConsumerKey consumerSecret:QQTwitterConsumerSecret];

它位于我的应用程序二进制文件的数据部分。黑客可以阅读此内容、反汇编应用程序等。

是否有任何安全的方式来存储消费者的秘密?我应该加密它吗?

4

4 回答 4

28

没有真正完美的解决方案。无论您做什么,致力于它的人都可以窃取它。

甚至适用于 iPhone/iPad/Android/mac/等的 Twitter。那里有一个密钥,他们可能只是以某种方式掩盖了它。

例如,您可以将其分解为不同的文件或字符串等。

注意:使用十六进制编辑器可以读取二进制文件中的 ascii 字符串,这是最简单的方法。通过将其分解为不同的部分或使用函数调用来创建密钥,通常会使该过程更加困难。

于 2011-04-02T19:33:46.667 回答
7

你可以对它进行base64编码来混淆它。或者,更好的主意,生成密钥而不是仅仅存储它——写这样的东西:

char key[100];
++key[0]; ... ; ++key[0]; // increment as many times as necessary to get the ascii code of the first character
// ... and so on, you get the idea.

然而,一个真正优秀的黑客无论如何都会找到它;真正保护它不被别人看到的唯一方法是使用安全的哈希函数,但是你也无法检索它:)

于 2011-04-02T19:48:11.283 回答
2

您不应在不仅仅在您的服务器上运行的应用程序中使用秘密 api 密钥。

即使它是完全隐藏的......你总是可以窥探通过电线的数据。而且由于它是您的设备,您甚至可以篡改 SSL(中间人使用由自定义 CA 创建的证书,该证书已添加到设备的受信任 CA 列表中)。或者,您可以连接到 SSL 库以在实际加密之前拦截数据。

于 2011-04-02T19:24:06.970 回答
0

一个很晚的答案......

如果您设置自己的服务器,则可以使用它来帮助您的桌面应用程序在 twitter 上获得用户的授权,而无需共享(即:嵌入)您的密钥。

您可以使用这种方法:

当用户安装您的桌面应用程序时,她必须在 twitter 和您的服务器上注册它 *) *) 应用程序要求服务器生成令牌请求 URL *) 服务器将生成的 URL 发送到应用程序 *) 应用程序引导用户到授权 URL *) 用户在 twitter 上授权您的应用程序并将生成的 PIN 粘贴到其中 *) 使用 PIN 您的应用程序获取令牌 *) 所有进一步的通信都使用令牌并且不涉及您的服务器

注意:应用程序使用您服务器的用户凭据(例如:ID 和密码)登录到您的服务器。

于 2016-02-28T17:54:48.767 回答