9

我的应用程序访问了许多 Web 服务,例如 Twitter 和 Flickr。它使用来自这些服务的 API 密钥,我想在我的二进制文件中混淆它们。(我并不担心盗版或其他任何事情,我只需要对这些密钥保密。)

最好的方法是什么?

如果我将它们存储为 const SecureString,是否会使它们内存不足?MSDN 描述说文本“在不再需要时从计算机内存中删除”,但不是 const 总是在内存中吗?

Dotfuscator 会在我的程序集中隐藏它吗?(假设我可以让它工作。)

4

3 回答 3

8

我最近不得不处理这种情况。问题不在于确保有人无法使用十六进制编辑器轻松找到它,而是当它通过线路发送到各种 API 时。无论如何,只需运行提琴手并观看请求将显示密钥。一些 API 将受益于私钥/公钥,这会有所帮助。

我能想出的唯一解决方案是创建我自己的外部托管的 Web 服务,充当客户端和目标 API 之间的代理。这使我可以为每个可以激活/停用的终端生成单独的密钥,并且大部分敏感数据都存储在我的远程代理应用程序中。

祝你好运!

~“别忘了喝你的阿华田”

于 2011-02-08T22:02:08.963 回答
4

Anon 是正确的,没有办法完全保护数据;总有人可以得到它。

但是你想让它尽可能地困难。这意味着不要做容易阅读的事情:

  • 不存储在注册表项中(例如TwitterAPIKey REG_SZ
  • 不存储在文本文件(例如twitterkey.txt)或 ini 文件中
  • 不存储在应用程序的 .config 文件中
  • 不在二进制文件中存储为纯文本
  • 不在二进制文件中存储未加密

这将使那些必须了解调试器和(可能)汇编代码的人离开。

你已经减少了很多攻击面。

只需遵循前三个建议,您就会顺利上路。

于 2011-02-08T21:36:32.190 回答
0

也许您可以要求您的用户使用他们自己的 api 密钥。他们可以将自己注册到 api,然后在您的应用设置中引用他们的密钥

于 2011-02-08T22:11:35.600 回答