Web.config加密——使用编程方式方式

系列目录:

    Web.config加密——基础知识

    Web.config加密——使用aspnet_regiis

    Web.config加密——使用编程方式方式

    web.config加密与解密(转) (以前转载别人的文章)
------------------------------------------------------------------

 

有Web.Config,其中一部分配置如下:

   <!-- 应用程序设置值 -->
  
< appSettings >
    
< add  key ="EricTest"  value ="EricTest" />
    
< add  key ="Encrypt"  value ="Encrypt value" />
  
</ appSettings >
  
<!-- 连接字符串 -->
  
< connectionStrings  >
    
< add  name ="EncryptConnection"  connectionString ="Data Source=.\SQL2000;Initial Catalog=Northwind;user id=sa;password=test" />
    
< add  name ="SQLExpress"  connectionString ="Data Source=.\SQLEXPRESS;Initial Catalog=myDB;user id=sa;password=test"
     providerName
="System.Data.SqlClient"   />
  
</ connectionStrings >

 

在加密前,先做一些准备工作。

 

首先引用使用空间

using  System.Configuration;
using  System.Web.Configuration;

将加密方式定义一下。主要是为了使用方便。

         ///   <summary>
        
///  加密方式
        
///   </summary>
         public   enum  EncryptType
        {
            DataProtectionConfigurationProvider,
            RSAProtectedConfigurationProvider
        }

 

使用DPAPI加密

         ///   <summary>
        
///  以DPAPI方式加密Config
        
///   </summary>
         private   void  EncryptWebConfigByDPAPI()
        {
            Configuration configuration 
=   null ;
            ConfigurationSection connectionSection 
=   null ;

            
// 打开Request所在路径网站的Web.config文件
            configuration  =  WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            
// 取得Web.config中connectionStrings设置区块
            connectionSection  =  configuration.GetSection( " connectionStrings " );
            
// 未加密时
             if  ( ! connectionSection.SectionInformation.IsProtected)
            {
                connectionSection.SectionInformation.ProtectSection(EncryptType.DataProtectionConfigurationProvider.ToString());
                configuration.Save();
            }
        }

 

加密前后的数据对比

   <!-- 加密前 -->
  
< connectionStrings  >
    
< add  name ="EncryptConnection"  connectionString ="Data Source=.\SQL2000;Initial Catalog=Northwind;user id=sa;password=test" />
    
< add  name ="SQLExpress"  connectionString ="Data Source=.\SQLEXPRESS;Initial Catalog=myDB;user id=sa;password=test"
     providerName
="System.Data.SqlClient"   />
  
</ connectionStrings >

-------------------------
  
<!-- 加密后 -->
  
< connectionStrings  configProtectionProvider ="DataProtectionConfigurationProvider" >
    
< EncryptedData >
      
< CipherData >
        
< CipherValue > AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAPCENeNbVhU6C+bx4E8qcPAQAAAACAAAAAAAQZgAAAAEAACAAAADiE56Y0pGCoKEpOvxMVmMYO3tMqI/2W89HUIq0LeJAegAAAAAOgAAAAAIAACAAAACYuFOjNtk1iprbV91mmP8aCIULLZvRHAPwbAvoHvtXpKACAABP0/YOt/B8IG/eLnaxrDVCXPq6l8McVOvpL0hV4507VEpJb6FyRoM9c5TI6iIF6Jz8GQfnfQiF4P27RLyvvvu/R9KpuwDsZ0IKjpe47Nt/q/qOLlQx6vhQVE8yAjJ64DrujH6wjS2XdZSC03Co4u9OG/YdJX9zkpjVMNW8cx5FFklYmIzHxWx+b1ZFtZMu0CA8lzU4slkTBFmE3JMMa4KqC6EGedDXD3z53QkBt3KISWt1lM5ulPeQ8rfR7qrzUEWQsgaGLuNTJvCDwlPJWbZVzQaOHo71/epQRPHgvmNAkK1/hRqwXr0uMF9K6HNKCr0NDLFECLHcjCC4zR6QhhWdWT8FHPm2Zg2yucekeHQsrbiWtjZqg/DdyVPLWqmEdj82T1Gm9u9xhDHuNLpOT1FXy7bGjjok9TW1MxbWIXQ7bBih0mUwmvESD8aZGdxoH0XEFyy3flY2hjwszG4Opg3Qmz1/S0x6Sbz1vJJL7rk7FTdG3PwMDFvcvKlmmDZQTkM3SqplazwrjYI4IJBnIAL/uBxwMdxO515lWS55dDkdnx5r8HtGoeCN+cw5qFW8xxRPRsQKg6Sgti1GF2KzezZ5WJegN0hqUs18XoEpzCuuALbzHqRNBswwn0/GfdadxfwdNxoTHdJ+cQC3vSLk5f02pTW9CFZWDn30AFjIpMtArNltppLvWAP1YxtKMtyzjmv7iiIOsMtHFICTJAzO7FeTc+YToifu/wddPESZQB2MlrefnUK+cBkoSzAusfhtqUWfhblv6JnEq5A/PdohEkSu0dn2pC6AeqoG/Yngb6BJzpRFxssDfIkDH6LfXdo4s5WJXJx7VQNqUo4mmTKoUcp6DGmoogZqbHODL3MbgKFQyjdvXV9+4Aa9qOlHbcKDL5tAAAAAChj0UAPAO59pmMZ7gJ67ho1Mxjg9NTuAh/lG5XI+phDRzWcNRmjv2ZrUhz8eWIgCMoIG7NviBnbmCeT4K8pXUw== </ CipherValue >
      
</ CipherData >
    
</ EncryptedData >
  
</ connectionStrings >

 

 

对使用DPAPI加密的数据解密

         ///   <summary>
        
///  解密DPAPI
        
///   </summary>
         private   void  DecryptWebConfigByDPAPI()
        {
            Configuration configuration 
=   null ;
            ConfigurationSection connectionSection 
=   null ;

            
// 打开Request所在路径网站的Web.config文件
            configuration  =  WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            
// 取得Web.config中connectionStrings设置区块
            connectionSection  =  configuration.GetSection( " connectionStrings " );
            
if  (connectionSection.SectionInformation.IsProtected)
            {
                connectionSection.SectionInformation.UnprotectSection();
                configuration.Save();
            }
        }

 

调用DPAPI加密数据(无需解密)

         ///   <summary>
        
///  取得加密后的数据
        
///   </summary>
         private   void  GetEncryptWebConfigByDPAPI()
        {
            
string  cncryptConnection  =  WebConfigurationManager.ConnectionStrings[ " EncryptConnection " ].ConnectionString;
            
string  sqlExpressConnection  =  WebConfigurationManager.ConnectionStrings[ " SQLExpress " ].ConnectionString;
        }

 

 

使用RSA加密

         ///   <summary>
        
///  以RSA方式加密Config
        
///   </summary>
         private   void  EncryptWebConfigByRsa()
        {
            Configuration configuration 
=   null ;
            ConfigurationSection connectionSection 
=   null ;

            
// 打开Request所在路径网站的Web.config文件
            configuration  =  WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            
// 取得Web.config中connectionStrings设置区块
            connectionSection  =  configuration.GetSection( " appSettings " );
            
// 未加密时
             if  ( ! connectionSection.SectionInformation.IsProtected)
            {
                connectionSection.SectionInformation.ProtectSection(EncryptType.RSAProtectedConfigurationProvider.ToString());
                configuration.Save();
            }
        }

加密前后数据对比: 

   <!-- 加密前 -->
  
< appSettings >
    
< add  key ="EricTest"  value ="EricTest" />
    
< add  key ="Encrypt"  value ="Encrypt value" />
  
</ appSettings >
------------------------------
  
<!-- 加密后 -->
  
< appSettings  configProtectionProvider ="RsaProtectedConfigurationProvider" >
    
< EncryptedData  Type ="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns
="http://www.w3.org/2001/04/xmlenc#" >
      
< EncryptionMethod  Algorithm ="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"   />
      
< KeyInfo  xmlns ="http://www.w3.org/2000/09/xmldsig#" >
        
< EncryptedKey  xmlns ="http://www.w3.org/2001/04/xmlenc#" >
          
< EncryptionMethod  Algorithm ="http://www.w3.org/2001/04/xmlenc#rsa-1_5"   />
          
< KeyInfo  xmlns ="http://www.w3.org/2000/09/xmldsig#" >
            
< KeyName > Rsa Key </ KeyName >
          
</ KeyInfo >
          
< CipherData >
            
< CipherValue > CJIkulw6qBtLeY5MJ9bs1ROpF1l3f4ulRzKnd6ZXN6XyG9O+b6Hr52ijK1AL9/+nsBseAPfdKDGaX/SKlJYwgzHhhi9sBrDBJ10dJcSnuGuWpI5zSLc+QHdpV0Z4iJTw83jmRDb9eFCX7aG60qWl52ofeqlI/ps1HsOjlKPSv8M= </ CipherValue >
          
</ CipherData >
        
</ EncryptedKey >
      
</ KeyInfo >
      
< CipherData >
        
< CipherValue > y1aEM/BRwcwZXWeuLe9mbakU8AuI7CpElrjoJgQEfzaoZXq7uEJspQAxJyDIYmCF4EgjKhE7pY6WBRAjRaBBODxxEQHGJ8I1+T554H8zosZ2InO43h5X0ZjCmvAWxNbEq1rP9DnuTcHEYqrw70nNShf79W6e2fmUF1DoVpwYNWMLeHJCP7ZkZg== </ CipherValue >
      
</ CipherData >
    
</ EncryptedData >
  
</ appSettings >

 

解密RSA加密数据

         ///   <summary>
        
///  解密Rsa
        
///   </summary>
         private   void  DecryptWebConfigByRsa()
        {
            Configuration configuration 
=   null ;
            ConfigurationSection connectionSection 
=   null ;

            
// 打开Request所在路径网站的Web.config文件
            configuration  =  WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
            
// 取得Web.config中connectionStrings设置区块
            connectionSection  =  configuration.GetSection( " appSettings " );
            
if  (connectionSection.SectionInformation.IsProtected)
            {
                connectionSection.SectionInformation.UnprotectSection();
                configuration.Save();
            }
        }

 

调用使用RSA加密数据(无需解密)

         ///   <summary>
        
///  取得加密后的数据
        
///   </summary>
         private   void  GetEncryptWebConfigByRsa()
        {
            
string  cncryptConnection  =  WebConfigurationManager.AppSettings[ " EricTest " ];
            
string  sqlExpressConnection  =  WebConfigurationManager.AppSettings[ " Encrypt " ];
        }

 

 

 

你可能感兴趣的:(config)