c# - 如何保存 Windows 程序的电子邮件/密码组合?

标签 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();

我的问题是将用户名和密码编码为固定文本似乎仍然会导致与硬编码相同的暴露,对吧?

任何帮助将不胜感激?

最佳答案

嗯...不要存储在 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/

相关文章:

c# - NCommon - 资源、文档

C# 控制台应用程序随机数生成

windows - Awk,^ 反斜杠不是行中的最后一个字符

.net - Windows 毫秒计时 - 没有 busywait?

java - 我如何对密码进行三层加密,SHA1,base64编码和盐

password-encryption - 如何在 TFS 2015 vNext 构建定义中使用 secret 变量?

c# - 为调用方法“Boolean Equals”提供的参数数量不正确

c# - 如何以加密形式上传文件

python - 自动执行重复的键盘操作

python - 在 Pyramid 中存储和验证用于登录的加密密码