如何保护.NET应用程序中的API密钥

时间:2011-02-08 21:13:44

标签: .net security obfuscation api-key dotfuscator

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

最好的方法是什么?

如果我将它们存储为const SecureString,是否会使它们不受内存影响? MSDN描述说文本“不再需要时从计算机内存中删除”,但不是常量内存中的常量?

Dotfuscator会在我的程序集中隐藏它吗? (假设我可以将它转到work。)

3 个答案:

答案 0 :(得分:8)

我最近不得不处理这种情况。问题不在于确保有人不能使用十六进制编辑器轻松找到它,而是通过网络将其发送到各种API。只需运行提琴手并观看请求即可显示密钥。一些API将具有私钥/公钥的好处,这有点帮助。

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

祝你好运!

〜“别忘了喝你的Ovaltine”

答案 1 :(得分:4)

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

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

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

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

你已经大大减少了攻击面。

只关注前三个建议,你就可以了。

答案 2 :(得分:0)

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