.net-如何在C#中安全地嵌入静态字符串(键)?

我正在寻找一种在WP7应用程序中安全存储API密钥的方法。 密钥是一个字符串,当前已硬编码到代码中(请参见下文)。 我知道使用反射器程序的人可以轻松查看此内容。 有没有更好的方法将此密钥打包为我的应用程序的一部分? 资源会更安全吗?

string key = "DSVvjankjnersnkaecjnDFSD44VDS23423423rcsedzcadERVSDRFWESDVTsdt";

(这实际上不是关键;)

先感谢您。

Chris Gonzales asked 2020-02-12T23:07:22Z
6个解决方案
22 votes

在您的代码中查看Safeguard Database Connection字符串和其他敏感设置,这是一本好书。 您的问题在“隐藏应用程序源代码中的键”部分下。

摘抄:

如果您在应用程序中定义了密钥,则除了混淆程序集之外,请尽量不要将实际的密钥字节存储在源代码中。取而代之的是,使用持久性特性(例如加密算法,密钥大小,密码短语,初始化向量和盐)来实现密钥生成逻辑(请参阅使用对称(Rijndael)密钥加密和解密数据中的示例)。这将引入额外的间接层,因此仅通过转储应用程序二进制文件中的符号将无法访问密钥。只要您不更改密钥生成逻辑和密钥特征,就可以保证生成的密钥是相同的。最好不要使用静态字符串作为密钥生成特征,而是动态构建它们。另一个建议是对待程序集的方式与对待数据存储的方式相同,即通过应用适当的ACL。并且,只有在没有其他数据保护技术起作用并且您唯一的选择是不对敏感数据进行加密的情况下,才可以将此选项用作最后的选择。

maka answered 2020-02-12T23:07:47Z
11 votes

我已经阅读了所有这些答案,而且我认为没有任何方法可以安全地嵌入此文件-不管放置在什么位置或如何混淆它。 只要它在您的XAP中并在应用程序中解码,它就始终可以被黑客使用。

如果您需要以合理的保护程度将密钥运送到xap内,那么我认为@maka的答案会产生最佳的选择-尽可能地混淆它-但是不要以为这可以确保您的安全-即不要 为您的移动银行应用程序执行此操作!

另外,如果您确实需要安全性,那么不要只在应用程序内运行-还要使用网络服务器。 例如,如果您正在做一个Facebook应用程序,并且需要以某种方式保护您的Facebook密钥,那么您需要将用户从您的应用程序重定向到服务器上的网页以进行身份验证。 然后,该网页将需要引导用户完成获取访问令牌的过程-然后,仅该访问令牌(以及公共appid)将需要返回到您的应用。 对于那些需要知道秘密密钥才能伴随每次调用的Web服务,那么恐怕每个单独的调用都可能需要通过您的服务器。

Stuart answered 2020-02-12T23:08:17Z
5 votes

您可以使用ProtectedData加密Api密钥,然后在运行时对其进行解密。 这是一个很好的教程,介绍如何在Windows Phone中加密数据:Mango中的加密

Ku6opr answered 2020-02-12T23:08:38Z
0 votes

可能是您可以事先对其进行加密,然后将其保存在app.config中。 并在读取时使用相同的算法对其进行解密。

Dipesh Bhatt answered 2020-02-12T23:08:58Z
0 votes

您可以使用DotFuscator禁用使用反射器的功能。但是,这将不允许您在不重新编译的情况下更改密钥。

过去,我在其他(基于Web / Winform的)软件中使用了以下方法:

[http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx]

Peter R answered 2020-02-12T23:09:27Z
0 votes

也许这不是一个答案,但请确保这是一个建议:

将加密的密钥存储在数据库中。 并将加密的“ db密码”存储在app.config中。

  1. 使用两个适当的字符串加密/解密算法,即算法x和y。
  2. 在发布之前,将加密的数据库密码放在app.config中。
  3. 解密app.config密码(算法y)以连接数据库以获取新的加密字符串(实数)。
  4. 关闭连接并使用算法x(如果反射器/ etc)解开新字符串。 没有运行。
  5. 用它。
  6. 放置保存字符串的对象。
Lost_In_Library answered 2020-02-12T23:10:18Z
translate from https://stackoverflow.com:/questions/9511989/how-can-i-securely-embed-a-static-string-key-in-c