C# 动态加密用户配置设置文件

C# 动态加密用户配置设置文件,c#,encryption,C#,Encryption,我有一个连接到数据库的应用程序。是否有方法加密包含连接字符串和其他设置的文件?该文件非常公开,因为数据库连接密码存储在user.config文件中。我发现的唯一半解决方案是为web应用程序添加一个web.config文件,但我不确定这是否适用于相同的方式。是否有关于配置加密的文档 以下是我迄今为止的尝试: user.config: 如您所见,我尝试只加密timeclockConnectionString,而不加密其他内容。显然,我有一个错误: 对象引用未设置为对象的实例 这可能源于config.

我有一个连接到数据库的应用程序。是否有方法加密包含连接字符串和其他设置的文件?该文件非常公开,因为数据库连接密码存储在user.config文件中。我发现的唯一半解决方案是为web应用程序添加一个web.config文件,但我不确定这是否适用于相同的方式。是否有关于配置加密的文档

以下是我迄今为止的尝试:

user.config:

如您所见,我尝试只加密timeclockConnectionString,而不加密其他内容。显然,我有一个错误:

对象引用未设置为对象的实例

这可能源于config.GetSection


任何帮助都将不胜感激。

可能吗?请确认空实例的位置,好吗?GetSection正在运行,但您正在传递GetSection的名称。您是否正在使用试图阻止用户在配置文件中看到的全局凭据?如果是这样,这是一种糟糕的方法,您应该重新考虑全局凭据。@Blorgbeard实际上它似乎来自:connStrings.SectionInformation.ProtectSectionprovider,但当我将config.GetSection更改为userSettings/TimeClock.Properties.Settings时,整个文档都会被加密,这就是为什么我认为config.GetSection是错误的。@cubble.Jockey是的,你是对的,但这里的情况并非如此;我只是想学着运用它。但如果人们真的做到了这一点,那么是的,我还有其他问题。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <TimeClock.Properties.Settings>
            <setting name="webserver" serializeAs="String">
                <value>test.js.com/</value>
            </setting>
            <setting name="timeclockConnectionString" serializeAs="String">
                <value>port=3306;server=localhost;user id=root;password=123456;database=timeclock;convertzerodatetime=True</value>
            </setting>
            <setting name="screenmode" serializeAs="String">
                <value>0</value>
            </setting>
        </TimeClock.Properties.Settings>
    </userSettings>
</configuration>
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(
    ConfigurationUserLevel.PerUserRoamingAndLocal);
string provider = "RsaProtectedConfigurationProvider";
ConfigurationSection connStrings = config.GetSection("timeclockConnectionString");

connStrings.SectionInformation.ProtectSection(provider);
connStrings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);