【问题标题】:C# How to store password in applicationC#如何在应用程序中存储密码
【发布时间】:2014-09-03 09:24:17
【问题描述】:

我正在尝试编写一个应用程序,该应用程序将安排为每小时从 Sharepoint 服务器自动下载一个页面。它是一个 xml 文件。到目前为止一切正常,除了我不喜欢在我的应用程序中以明文形式存储连接到 Sharepoint 所需的密码。示例代码:

WebClient client = new WebClient();
String username = "myusername";
String password = "mypassword"
String filename = "C:\\Temp\\" + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".xml";

client.Credentials = new System.Net.NetworkCredential(username, password);
string credentials =  Convert.ToBase64String(Encoding.ASCII.GetBytes(username + ":" + password));
client.DownloadFile("myurl", filename);

如果有人从我的服务器获取可执行文件并将其反汇编,是否有办法让我的密码更难读取?带反光板?
我发现了这个: How to store passwords in Winforms application? 但我并没有真正弄清楚如何在我的应用程序中使用它。

【问题讨论】:

  • @O.R.Mapper,我完全不同意。我认为这个问题没有任何开放式的结果。他提出了他的问题和他的代码。考虑到这是他的第一个问题,我认为他做得很好。您的评论为新用户创造了一个不受欢迎的环境。
  • 您的链接有点混乱...阅读此处的示例msdn.microsoft.com/en-us/library/…
  • @JamesHill:我很抱歉我造成了这种印象,特别是在我在这里回答关于 SO 据称是多么不受欢迎之前已经阅读了各种咆哮。因此,我认为我已经付出了额外的努力来确保该网站不会显得不受欢迎。我以友好的语气回应,而不是说“你做错了”,我准确指出了我认为可以改进的地方,我提供了一个链接,指向我认为 OP 可能会更好地解决他们的问题,我没有投反对票,我没有近距离投票,我指出我认为这个问题在这里不太合适。
  • @O.R.Mapper:我认为你的建议在语气和内容上都很好(尽管我不同意开放式的部分)。
  • O. R. Mapper:你的帖子没有不友好的地方。感谢您的建设性评论,下次我会尝试更好地解决我的问题。

标签: c# security


【解决方案1】:

事实上你最好不要使用密码。如果服务在正确的凭据下运行,您可以使用DefaultNetworkCredentials

所以在您的示例中:

client.Credentials = CredentialCache.DefaultNetworkCredentials;

这将为您获取当前网络用户的凭据,例如 DOMAIN\USER

【讨论】:

  • 我认为散列在这种情况下不会有帮助,因为密码实际上必须用于执行操作,而不是与用户输入进行比较。
  • 是的,用户将看不到密码,但应用程序也无法使用密码,这就是首先存储密码的原因。
  • 不,应用程序无法破译它。散列是单向的。数据需要加密,以便可以解密。没有去散列,这是散列有用的主要原因之一。
  • @Patrick Hofman:这确实成功了。我使用您的代码并安排应用程序以有权访问 Sharepoint 服务器的用户身份运行。它有效。非常感谢。
【解决方案2】:

如果您必须在应用程序中存储密码,请将其放入配置文件中,然后使用 Protected Configuration 加密相应部分。

【讨论】:

  • 仅适用于 web.config 吗?这个问题最初是针对winforms的,但似乎在编辑中被删除了。
  • 我认为它是为 ASP.NET 应用程序创建的,但它适用于任何配置文件,例如vbforums.com/…。该代码是 VB,但演示了原理。
猜你喜欢
  • 2010-09-07
  • 2012-03-06
  • 2010-10-06
  • 2023-04-05
  • 2019-04-01
  • 1970-01-01
  • 2011-10-21
  • 2011-09-21
  • 2020-02-02
相关资源
最近更新 更多