2012-01-18 97 views
0

可能重复:
Encrypting passwords in WinForms app.config, .NET在properties.settings文件中安全地存储密码的最佳方式是什么?

我想成为一个登录框能储存用户名/密码对。每次加载应用程序时,都会从Properties.Settings文件中加载保存的凭据,然后使用这些值填充登录框。

我知道密码总是有可能被黑客入侵,但是任何事情都必须比将明文存储在properties.settings文件中更好。

我一直在寻找使用SecureString,但所有似乎是做的是防止密码存储在明文在内存中。

任何想法最好的办法来处理这个?

+0

为什么你就不能使用内置的Windows提供的密码存储机制? – 2012-01-18 17:05:22

+0

你是否控制你正在登录的应用程序? – 2012-01-18 17:05:52

+1

基本上重复http://stackoverflow.com/questions/1392876/encrypting-passwords-in-winforms-app-config-net – Lloyd 2012-01-18 17:06:01

回答

0

您只能存储密码散列,而不是保存纯文本。然后,当您比较存储在用户数据库中的密码和输入的密码时,您将比较散列而不是打开的文本。在System.Security.Cryptography中查找...

0

如果您希望用密码预填充登录框,那么它必须以明文的某处存储,无论作为源中的文字字符串,数据库,配置或设置文件,或编译资源中的字符串。

另请注意,从被屏蔽的密码字段中提取密码可以像发送消息到文本框一样简单。

您可能会考虑加密密码或生成MD5散列并存储,即。用户登录时,请使用与原始密码相同的过程,并比较结果以查看是否输入了正确的密码,但这不会让您预填充登录框。

另一方面,如果要填充对话框,需要输入密码有什么意义?你也可以只显示一个表示“按回车登录”的表格,根本没有字段。

+0

因为他们可以点击/取消点击“记住我”复选框,所以下次应用程序启动时应该记住他们的密码。如果验证成功,将使用存储在其设置文件中的密码,并且登录不会显示。我仍然需要在某处存储密码。我只是觉得让它更安全一点很好。 – jaffa 2012-01-19 10:55:16

1

我不明白为什么提到哈希值;如果它们被设计成不可逆转的,那么它们如何被用来预先填充这些字段呢?

当我前一阵子做了类似这样的东西,我做了以下内容:

AES_encrypt (username + saltString1 + password + saltString2) 

店,其结果并存储AES密钥。

要填充字段:

  • 召回所述数据和所述密钥
  • 解密数据,使用密钥
  • 分割字符串约saltString1
  • 分割的第一个值是用户名
  • 第二个值是password + saltString2
    • substrin G采用saltString2,你有你的密码
+0

是的,这与散列无关,它防止密码以明文形式存储在app.config文件中。 – jaffa 2012-01-19 10:56:28

+1

所以现在密码是加密的,AES密钥不是。我想我们也可以对它进行加密并说“这是一直下降的乌龟”,但它必须在某个地方结束,这意味着任何拥有该代码的人都可以像密码一样轻松获取密码。 – harold 2012-01-19 16:15:17

相关问题