我已经为从Windows Task Scheduler启动的可执行文件构建了手册App.Config。我希望在其中存储加密的登录名和密码,但是DPAPI使用XML认为非法的字符进行加密。 CDATA不会掩盖这些内容,我想知道我是否忽略了允许App.Config XML包含这些内容的任何内容。
我尝试过CDATA。 我已尝试转义非法字符。 我尝试过将字符转换为它们的Ox等效项。
用户登录名为jas189
加密后的样子:ì¦Ì \ nCbp:Á!
用户密码是密码
加密后的样子如下:I @!³J。\“1ùÊö¬
我希望找到一种方法来存储加密的用户名和密码,以便远程服务器可以登录以完成工作。 App.Config将与.exe Task Scheduler调用一起使用。
答案 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才能使其正常工作。文档非常清楚如何执行此操作。