zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#为配置文件加密的实现方法

2023-06-13 09:15:29 时间

本文实例讲述了C#为配置文件加密的实现方法,分享给大家供大家参考。具体实现方法如下:

一般来说,在web.config或app.config文件里我们经常会存储一些敏感信息,比如connectionStrings或者appSettings,比如像下面的文件。

复制代码代码如下:

<?xmlversion="1.0"?>
<configuration>
   <system.web>
     <compilationdebug="true"targetFramework="4.0"/>
   </system.web>
   <connectionStrings>
     <addname="MyNwConnectionString"connectionString="Server=myServerAddress;Database=myDataBase;UserId=myUsername;Password=myPassword;"/>
   </connectionStrings>
   <appSettings>
     <addkey="User"value="myUsername"/>
     <addkey="Password"value="myPassword"/>
   </appSettings>
</configuration>

复制代码代码如下:

usingSystem;
usingSystem.Configuration;

namespaceWebConfigEncryptTest
{
   publicpartialclassWebForm1:System.Web.UI.Page
   {
       protectedvoidPage_Load(objectsender,EventArgse)
       {
           stringuser=ConfigurationManager.AppSettings.Get("User");
           stringpassword=ConfigurationManager.AppSettings.Get("Password");
           stringconnectionString=ConfigurationManager.ConnectionStrings["MyNwConnectionString"].ConnectionString;
       }
   }
}

一、加密文件可以使用的Provider

.NET为我们提供了一个工具aspnet_regiis.exe来对web.config文件中的敏感信息进行加密(app.config文件可以先改名为web.config,加密后再改回app.config)。你可以使用两个provider中的一个来进行加密:

System.Configuration.DPAPIProtectedConfigurationProvider:在System.Configuration.dll中,使用WindowsDPAPI(DataProtectionAPI)来进行加密,密钥存在WindowsLocalSecurityAuthority(LSA)中。

二、加密文件的命令

加密web.config文件可以使用:

复制代码代码如下:aspnet_regiis-pefsectionweb-app-physical-dir

Encrypttheconfigurationsection.Optionalarguments:

[-provprovider]Usethisprovidertoencrypt.

比如运行下面的命令就会分别对connectionStrings和appSettings中的信息进行加密:

复制代码代码如下:aspnet_regiis.exe-pef"connectionStrings""C:\myweb\HelloService"

aspnet_regiis.exe-pef"appSettings""C:\myweb\HelloService"

加密后的web.config文件变成:

复制代码代码如下:<?xmlversion="1.0"?>
<configuration>
   <system.web>
     <compilationtargetFramework="4.0"/>
   </system.web>
   <connectionStringsconfigProtectionProvider="RsaProtectedConfigurationProvider">
       <EncryptedDataType="http://www.w3.org/2001/04/xmlenc#Element"
           xmlns="http://www.w3.org/2001/04/xmlenc#">
           <EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
           <KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
               <EncryptedKeyxmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
                   <KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
                       <KeyName>RsaKey</KeyName>
                   </KeyInfo>
                   <CipherData>
                       <CipherValue>E2fO9C0TJVxImLYQZza+fCQdDbTpNh/kOKLRsK6zcFjkgtUCl6SnMViuu/2G1NVTxqXyEWYwyK6AiCZA+feeG/AvYvmEEVopVDb0YyGeuJgEI1r8HxTl8Cv+f2EIimP7LJI+JRZVerI4MU6Ke3wxm2S/ATc73/W6eg9808f4/D6J0pp3wND4E79gBiAnBHFYQIefdJYUsmHR9z9LiIqjCllkkj/JB0kso0kGJ9i+iew1Jae5jugIN8gPxsXbCfmw6ru3I3Kbpa8Z5AllfkFA2YKrsuV3c7eLLJ0kB4lsIJIUTy3kRyA4GjdChOmlNwwffIbhwUPPxa25CiF0VAq27Q==</CipherValue>
                   </CipherData>
               </EncryptedKey>
           </KeyInfo>
           <CipherData>
               <CipherValue>I1DWG11Iz/rq+NC9C/21B3Q22J9+IexHPH6kkWvQPeHUO6OvOWeQbk3wHALR2ql8pz0gQJFyfTypMk/xSSikFI2Dcy5mgYY3kP73bQQ83ho3O1HPw9TsRtK1G8gmVNGyQLj7iTRcoGfiYYmSibPynv1MzSV1qDXlnVfKiMqKRZ5ZPiMSMc5u3dDEL/JW1oCvAGs5tHrZU5+vgvm0yCmSuCWZbXva+iv9J35EQqs58pq+hwVo1hg1dffdupGCBykaXGl5VX3TIGc=</CipherValue>
           </CipherData>
       </EncryptedData>
   </connectionStrings>
   <appSettingsconfigProtectionProvider="RsaProtectedConfigurationProvider">
       <EncryptedDataType="http://www.w3.org/2001/04/xmlenc#Element"
           xmlns="http://www.w3.org/2001/04/xmlenc#">
           <EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
           <KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
               <EncryptedKeyxmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
                   <KeyInfoxmlns="http://www.w3.org/2000/09/xmldsig#">
                       <KeyName>RsaKey</KeyName>
                   </KeyInfo>
                   <CipherData>
                       <CipherValue>WVoFIs8rSEgqKw1C0QCmePs7WK6EIoGCfdx9CTJNmABoVvoEWPnOEQwz/6Ruu0rGwa7q91KuhGILmy4NEN0padnX6FScCdEzP6CS59U3IFumYmTrD7D9ihqFO2aIL/SuBvV3D2kxhHaYGFaPuvYgsyOLf3+aYR3O/uh/k5wZxLoIeKUUrT762J3bdaK6cJWQeuOu4j2vDXEdawdwhlnK12UV8+/AXZNlFW1N3Z0RUVFX1nMSwTaIu8F3tZ9hCFbGwbTm2T0XnfDOcB6dCxCutqC8pXD36laAfiSANzAWoC+Yhf5eFSj24fX0NU6UTQB8fqLyOgWsIMLxZLKVrwnlmg==</CipherValue>
                   </CipherData>
               </EncryptedKey>
           </KeyInfo>
           <CipherData>
               <CipherValue>5W2KhG/oETLUDptobcOM52x1qD/g9A0By/wcGXI+fm7EdcD8mT3TxsLVBVcHRBCyUO7OIHl8NyCrduRSYwyd8ggBCriQ5KrbAmW4LXrNnw/JjjCEJWPuRcRucVRfpgap2nHh6BXRXC/AU6v0GcRqy7LV8179PgGtyAa8IE1mV/w=</CipherValue>
           </CipherData>
       </EncryptedData>
   </appSettings>
</configuration>

其中RSAProtectedConfigurationProvider是默认的缺省provider,如果想使用DPAPIProtectedConfigurationProvider,可以用-prov参数指明:

aspnet_regiis.exe-pef"connectionStrings""C:\myweb\HelloService"-prov"DataProtectionConfigurationProvider"

aspnet_regiis.exe-pef"appSettings""C:\myweb\HelloService"-prov"DataProtectionConfigurationProvider"

加密配置文件后,源程序不需要做任何改动。如果要修改或添加新的配置信息,需要先解密配置文件。不论使用哪种Provider,都只能在进行加密的计算机上对配置文件进行解密。

三、解密文件的命令

解密的命令如下(解密命令不需要-prov参数):

复制代码代码如下:-pdfsectionweb-app-physical-dir

Decrypttheconfigurationsection.

aspnet_regiis.exe-pdf"connectionStrings""C:\myweb\HelloService"

aspnet_regiis.exe-pdf"appSettings""C:\myweb\HelloService"

四、总结

配置文件中经常会有用户名密码的敏感信息,为了防止该信息泄露,需要对配置文件进行加密。加密与解密可以使用.NET提供的工具aspnet_regiis.exe,可以在Windows.NET的文件夹中找到它。

该工具只对web.config文件进行修改,如果要加密或解密app.config,可以先将app.config文件改名为web.config,加密或解密后再改回来。

希望本文所述对大家的C#程序设计有所帮助。