我正在创建一个 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();
我的问题是将用户名和密码编码为固定文本似乎仍然会导致与硬编码相同的暴露,对吧?
任何帮助将不胜感激?
最佳答案
嗯...不要存储在 AppConfig 设置中。
如果您无法使用数据库(存储散列和加密的字符串)为此获取一个新文件,您甚至可以保护它以仅允许服务用户帐户读取/修改它,或将其存储在服务配置文件中目录(其用户帐户配置文件目录)
我会使用比 xml 更容易阅读的 ini 文件结构,其中每一行都包含类似的内容
var mergedCredential = string.Format("{0}|{1}", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="81f4f2e4f3c1e9e4f3e4afe2eeec" rel="noreferrer noopener nofollow">[email protected]</a>" , "P@ssw0rd");
User1HashedCredentials=EncryptString("new username", mergedCredential);
我使用管道“合并”凭据,因为您可以阻止用户在用户名上使用它
解密时用“|”分隔
var credentials = DecryptString("new username", User1HashedCredentials);
var splitted = credentials.Split('|');
Username = splitted[0]
Password = splitted[1]
ini 文件示例:
[Users]
Count=5
[SendEmailSection]
User1=dsaa$#asdasd$#@rr==
User2=dggggjh7/sd$#@rr==
User3=dsaasd"/$%asdasd$#@rr==
User4=dsas/&"dasd$#@rr==
User5=dsAa&s3dasd$#@rr==
这更容易维护和修改。您甚至可以制作自己的专用 ini 阅读器/编写器阅读部分,用“=”分割
关于c# - 如何保存 Windows 程序的电子邮件/密码组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54000267/