ASP.NET 4
我在我的web场的web.config中的连接字符串使用了RSA key encryption。但是,还有一个自定义密码条目,我想加密。如何使用RSA密钥对其进行加密,而不必对其他配置进行加密。请指教,谢谢。
例:
<appSettings> ... <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="Password" value="asdfasdf" /> <add key="SessionEmail" value="foo@foo.com" /> <add key="DefaultFolder" value="789" /> </appSettings>
解决方法
您可以将密码放入单独的部分,并仅加密此部分。例如:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler,System,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" /> </configSections> <appSettings> <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="SessionEmail" value="foo@foo.com" /> <add key="DefaultFolder" value="789" /> </appSettings> <secureAppSettings> <add key="Password" value="asdfasdf" /> </secureAppSettings> </configuration>
然后(注意,我在我的示例中使用DPAPI,以适应RSA的提供程序):
aspnet_regiis -pef secureAppSettings . -prov DataProtectionConfigurationProvider
一旦加密,文件将如下所示:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="secureAppSettings" type="System.Configuration.NameValueSectionHandler,PublicKeyToken=b77a5c561934e089" /> </configSections> <appSettings> <add key="Host" value="www.foo.com" /> <add key="Token" value="qwerqwre" /> <add key="AccountId" value="123" /> <add key="DepartmentId" value="456" /> <add key="SessionEmail" value="foo@foo.com" /> <add key="DefaultFolder" value="789" /> </appSettings> <secureAppSettings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>AQAAANCMnd.......</CipherValue> </CipherData> </EncryptedData> </secureAppSettings> </configuration>
文件加密后,您在应用程序中访问这些设置的方式仍然相同,并且完全透明:
var host = ConfigurationManager.AppSettings["Host"]; var password = ConfigurationManager.AppSettings["Password"];