将加密的密码存储在App.Config文件中

时间:2019-01-25 20:01:18

标签: c# xml encryption app-config

我已经为从Windows Task Scheduler启动的可执行文件构建了手册App.Config。我希望在其中存储加密的登录名和密码,但是DPAPI使用XML认为非法的字符进行加密。 CDATA不会掩盖这些内容,我想知道我是否忽略了允许App.Config XML包含这些内容的任何内容。

我尝试过CDATA。 我已尝试转义非法字符。 我尝试过将字符转换为它们的Ox等效项。

用户登录名为jas189

加密后的样子:ì¦Ì \ nCbp:Á!

用户密码是密码

加密后的样子如下:I @!³J。\“1ùÊö¬

我希望找到一种方法来存储加密的用户名和密码,以便远程服务器可以登录以完成工作。 App.Config将与.exe Task Scheduler调用一起使用。

1 个答案:

答案 0 :(得分:0)

在配置文件中创建专门的配置部分:

<configSections>
   <section name="localSecrets" type="System.Configuration.NameValueFileSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>

然后将您的密码添加到该新定义的部分中的项目:

<localSecrets>
   <add key="Password" value="Your Password Goes here"/>
</localSecrets>

使用标准的加密配置部分机制(使用aspnet_regiis或您下载或创建的其他工具来加密该部分(我不是aspnet_regiis的忠实拥护者;它可以工作,但它确实希望您对connectionStrings部分进行加密)在web.config文件中))。

然后以(通常)正常方式获取数据:

 var secretSection = ConfigurationManager.GetSection("localSecrets") as NameValueCollection;
 string secret;
 if (secretSection != null)
 {
     secret = secretSection["Password"]?.ToString();
 }

无论配置部分是否加密,这都将以相同的方式工作。这样,配置文件中的所有其他内容都以明文形式出现,唯一的密文显示在您的自定义配置部分中。

与其他任何加密的配置部分一样,您需要创建,共享并正确地对RSA密钥容器进行ACL才能使其正常工作。文档非常清楚如何执行此操作。