我的应用程序访问了许多 Web 服务,例如 Twitter 和 Flickr。它使用来自这些服务的 API 密钥,我想在我的二进制文件中混淆它们。(我并不担心盗版或其他任何事情,我只需要对这些密钥保密。)
最好的方法是什么?
如果我将它们存储为 const SecureString,是否会使它们内存不足?MSDN 描述说文本“在不再需要时从计算机内存中删除”,但不是 const 总是在内存中吗?
Dotfuscator 会在我的程序集中隐藏它吗?(假设我可以让它工作。)
我的应用程序访问了许多 Web 服务,例如 Twitter 和 Flickr。它使用来自这些服务的 API 密钥,我想在我的二进制文件中混淆它们。(我并不担心盗版或其他任何事情,我只需要对这些密钥保密。)
最好的方法是什么?
如果我将它们存储为 const SecureString,是否会使它们内存不足?MSDN 描述说文本“在不再需要时从计算机内存中删除”,但不是 const 总是在内存中吗?
Dotfuscator 会在我的程序集中隐藏它吗?(假设我可以让它工作。)
我最近不得不处理这种情况。问题不在于确保有人无法使用十六进制编辑器轻松找到它,而是当它通过线路发送到各种 API 时。无论如何,只需运行提琴手并观看请求将显示密钥。一些 API 将受益于私钥/公钥,这会有所帮助。
我能想出的唯一解决方案是创建我自己的外部托管的 Web 服务,充当客户端和目标 API 之间的代理。这使我可以为每个可以激活/停用的终端生成单独的密钥,并且大部分敏感数据都存储在我的远程代理应用程序中。
祝你好运!
~“别忘了喝你的阿华田”
Anon 是正确的,没有办法完全保护数据;总有人可以得到它。
但是你想让它尽可能地困难。这意味着不要做容易阅读的事情:
TwitterAPIKey REG_SZ
)twitterkey.txt
)或 ini 文件中这将使那些必须了解调试器和(可能)汇编代码的人离开。
你已经减少了很多攻击面。
只需遵循前三个建议,您就会顺利上路。
也许您可以要求您的用户使用他们自己的 api 密钥。他们可以将自己注册到 api,然后在您的应用设置中引用他们的密钥