如何为Windows程序保存电子邮件/密码组合?

时间:2019-01-02 01:28:39

标签: c# windows password-encryption

我正在创建Windows服务,该服务必须以特定的时间间隔向各个人发送电子邮件。我正在服务器上使用一个需要安全连接的帐户。

我找到此参考:https://nimblegecko.com/how-to-store-login-details-securely-in-application-config-file/  我试图实现的代码是这样的:

var configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);

configuration.AppSettings.Settings["username"].Value = EncryptString("new username", configPassword);
configuration.AppSettings.Settings["password"].Value = EncryptString("new password", configPassword);
configuration.Save();

我的问题是对用户名和密码进行编码,因为固定文本似乎仍然会导致与硬编码相同的风险,对吗?

任何帮助将不胜感激?

3 个答案:

答案 0 :(得分:3)

嗯...不要存储在AppConfig设置中。

如果您不能为此使用数据库(存储散列和加密的字符串)以获取一个新文件,则甚至可以对其进行保护,以仅允许服务用户帐户读取/修改它,或将其存储在服务配置文件中目录(其用户帐户配置文件目录)

我会使用比XML更易于阅读的ini文件结构来完成此操作,其中每行都包含

var mergedCredential = string.Format("{0}|{1}", "user@here.com" , "P@ssw0rd");
User1HashedCredentials=EncryptString("new username", mergedCredential);

我使用管道“合并”了凭据,因为这样可以防止用户在用户名上使用它

解密时,您用“ |”分割

var credentials = DecryptString("new username", User1HashedCredentials);
var splitted = credentials.Split('|');
Username = splitted[0]
Password = splitted[1]

ini文件示例:

  

[用户]

     

Count = 5

     

[SendEmailSection]

     

User1 = dsaa $#asdasd $#@ rr ==

     

User2 = dggggjh7 / sd $#@ rr ==

     

User3 = dsaasd“ / $%asdasd $#@ rr ==

     

User4 = dsas /&“ dasd $#@ rr ==

     

User5 = dsAa&s3dasd $#@ rr ==

更易于维护和修改。您甚至可以制作自己的专业ini读取器/写入器读取部分,并用“ =“

答案 1 :(得分:1)

我不建议将凭据存储在app.config文件中。如果计划将其存储在此处,则应使用适当的加密和解密进行存储。

有关您的信息,您可以参考此link

但是我建议您使用窗口凭证管理器来存储密码 有关更多详细信息,您可以使用其nuget软件包和示例

Nuget

Another reference

Github

答案 2 :(得分:0)

您可以在应用的“偏好设置”中找到它。 右键单击您的项目。选择添加。添加.settings表单。然后创建一个包含电子邮件,密码等的表。