asp.net C#中對Web.Config字符串加密與解密的方法

分類:編程 時間:2016-11-06
[摘要:【案例援用】 比方 XML/HTML code ? 1 2 3 <connectionStrings> <add name="EnterpriseWebConnectionString" connectionString="Data Source=. ; Ini]

【案例引用】

例如

XML/HTML code ? 1 2 3 <connectionStrings>         <add name="EnterpriseWebConnectionString" connectionString="Data Source=. ; Initial Catalog=Enterprise;User ID=sa;Password=1391018" providerName="system.Data.SqlClient"/>     </connectionStrings>
如何給Data Source=. ; Initial Catalog=Enterprise;User ID=sa;Password=1391018" providerName="System.Data.SqlClient 加密?
在程序中如何調用?能否給個例子?有沒有方便加解密的小工具呢?

1. .NET本身已經提供有Encrypt命名空間的一些加密算法,有對稱的,也有非對稱的。當然,你也可以設計自己的一個加密算法。
2. 無論是Web應用,還是Winform應用,連接串都通常是保存在web.config或者app.config裏的,並且提供了相應的一個Singleton模式的類來提供對連接串的訪問。
3. 你需要做的,就是每次連接前,利用這個Singleton類把連接串密文取出,解密後再把明文作為參數傳遞給Connection對象的構造子進行連接。

1.先來看看如何在web.config中寫入數據庫連接字符串.打開web.config文件,一開始web.config文件裏默認就有兩個配置節,分別是"<connectionStrings/>","<appSettings/>",在這兩個配置節下都可以寫入連接字符串,一般來說是在<connectionStrings>中寫,如:
<connectionStrings>
<add name = "connectionString" connectionString="server=localhost;database=hh_li;User ID=sa;password=”/>
</connectionStrings>
或者寫在<appSettings>中:
<appStrings>
<add key=''connectionstring" value=http://www.ithao123.cn/”server=localhost;database=hh_li;User ID=sa;password=”/>
</appStrings>
在以上兩種方式中,name和key的值是連接字符串的"名字",就和一個變量的變量名一樣,connectionString的值是具體的連接字符串內容.
2.asp.net2.0中讀取web.config數據庫連接字符串2種方法
方法一:
string myConn = System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString;
方法二:
string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["sqlConnectionString"].ToString();
3.web.config中連接字符串的加密解密
加密:
asp.net裏面web.config文件中的連接字符串是以明碼形式保存的,通常存儲內容包括數據庫服務器名稱、數據庫名稱、賬號、甚至包括密碼。
為了解決這個問題,ASP.NET 2.0支持一種將連接字符串等敏感信息加密存儲於是Web.config文件中的方法.進入.net 的SDK命令提示符,使用命令行工具aspnet_regiis.exe.該應用程序位於“%systemroot%\Micrsoft.NET\Framework\versionNumber”文件夾中。aspnet_regiis.exe是一種常見的命令行解釋器,開發人員只需按照簡單的語法要求輸入命令,就可以完成連接字符串的加密或解密的任務。
  假設需要加密的Web.config文件位於“D:\website2”文件夾中,則使用的命令行如下。
  aspnet_regiis.exe -pef “connectionStrings” “D:\website2”
  參數"-pef"表示根據文件絕對路徑執行加密配置節;“connectionStrins”表示所加密的配置節名稱;“D:\website2”表示Web.config文件所在文件夾絕對路徑。  加密結束後,aspnet_regiis.exe將提示開發人員加密成功
解密:連接字符串加密後,其它人很難在不經過解密的情況下,了解具體的連接字符串內容。
解密的命令如下: aspnet_regiis.exe -pdf “connectionStrings” “D:\website2”  需要註意的是,加密過程中使用了一個基於本機的密鑰,這意味著解密過程必須在同一臺計算機上完成。如果是將加密後的Web.config文件移動到其它計算機上,那麽Web.config文件中的連接字符串將不能夠正常解密。註意,加密是-pef,解密是-pdf,不要搞錯了。

上述整理成BAT批處理腳本:

-----------------------------------------------

連接字符串加密

-----------------------------------------------
@echo off
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" "C:\Program Files\Microsoft\.NET Pet Shop 4.0\Web"
PAUSE


-----------------------------------------------
連接字符串解密

-----------------------------------------------
@echo off
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pdf "connectionStrings" "C:\Program Files\Microsoft\.NET Pet Shop 4.0\Web"
PAUSE

【詳細介紹】

在WEB網站開發過程中,如果我們將數據庫連接字符串封裝到.DLL文件中,將會給數據庫和程序的遷移帶來麻煩,因為萬一服務器地址或者數據庫發生變更,那麽我們就不得不修改源程序並重新將其編譯。更好的解決方法是將數據庫連接字符串寫入到web.config配置文件中,可問題是將連接字符串寫入到web.config文件中之後,任何人都能打開看到所連接的數據庫名和密碼,又會帶來安全隱患,因此為了保證數據庫的安全性,我們可以通過使用微軟IDE自帶的命令aspnet_regiis.exe將配置文件web.config中指定的標簽進行加密,如果以後想查看加密後的連接字符串,我們還可以使用aspnet_regiis.exe將加密後的字符串進行解密。


1.    加密通用語法 
  加密一個特定網站的web.config文件的通用形式
  aspnet_regiis.exe -pef secion physical_directory -prov provider
  或
  aspnet_regiis.exe -pe secion -app virtual_directory -prov provider
  其中,各個參數的含義如下:

  •      section表示要加密的配置節
  •      physical_directory用於指定站點的物理路徑。
  •      virtual_directory用戶指定虛擬路徑。
  •      provider指定加密提供程序。

    加密一個特定站點的連接字符串就是:
    aspnet_regiis.exe -pef "connectionStrings" "你的web項目路徑" -prov "DataProtectionConfigurationProvider"
    其中DataProctionConfiguartionProvider是Windows數據保護API(DPAPI)提供程序,它使用Windows內置的密碼學技術來加解密配置節。默認情況下,這個提供程序使用本機的密鑰。


2.    加密方法

 

  運行Visual Studio 2008命令提示


\

   

  加密後的結果

[xhtml] view plain copy
  1.   <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">  
  2. <EncryptedData>  
  3.  <CipherData>    <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAy1WyvzomB0WAlqYo+ogiigQAAAACAAAAAAADZgAAqAAAABAAAADbDjp+bAce//lsg/so66+8AAAAAASAAACgAAAAEAAAANlF3b73Kdupv/cAf4a9nPUwAQAAoTvrHdAjNjaJFEfiG7pD6sG8GMNJKGpnd4JLchu7W9XhOuPgG4C/LD9H9WQ9uF3t/0MoMI9tbrWdFJ1Yu5/e3PAV4RCbCvDlPD0VC7hxtDMqfRjQ+1OhTdk2woiSNpx0TzXwZE25o4vlXq/aYri1Wmlo2zyRqSkg0hQFQbObCf7lrgWEUjsv+pEOS5OVXcgNhFipVMy5iQ8sH5fNHmGg8gu5JlZQaOqYFG8ci7MGOebcQzR67krJXRBrs26lZtAj8lzf2bK+QcSqtU7Rt4C33JbLqisPL9xhfoUl9GvGTu5VS1S1H5VtErTeYXxnL7PTIr3cNjIbDMjI48LJfoOgtymT35KUdK3J0DxB68DqPaeK5QSEC/L0+6bizStRZ7BDnOngV/XfiVJnbSNYXX5IShQAAACuGn8QGUuQ4TOzkKcc891SV/CVDQ==</CipherValue>  
  4.  </CipherData>  
  5. </EncryptedData>  
  6. lt;/connectionStrings>  

3.    解密 
   解密該連接字符串也很簡單
   aspnet_regiis.exe -pdf "connectionStrings" '你的web項目路徑"

\

   解密後的結果:

[xhtml] view plain copy
  1. <connectionStrings>  
  2.     <add name="Sql" connectionString="Data Source=.;Initial Catalog=MySchool;Integrated Security=True" />  
  3. </connectionStrings>  


4.    後臺代碼讀取配置文件web.config中數據庫連接字符串的方法:
 
[c-sharp] view plain copy
  1. using System.Configuation;  
  2. …  
  3. protected void Page_Load(object sender, EventArgs e)  
  4. {  
  5.     lblmessage.Text = ConfigurationManager.ConnectionStrings["Sql"].ToString();  
  6.  }  
  7. …  

   運行效果圖: 

\


5.    在連接字符串的加密和解密的過程中,需要註意一下幾點。 

  •      使用加密的連接字符串

    使用加密的連接字符串不需要編碼解密,ASP.NET會自動對加密內容進行解密。

  •      加密和解密在同一臺計算機上使用

    在加密過程中,使用了一個基於本機的密鑰。這就意味著加密和解密必須在同一臺計算機上進行,否則將不能解密。同時,在一臺計算機上加密的配置,在另一臺計算機上將不能正常使用。

  •      中文路徑問題

    該命令對中文支持不是很好。如果站點的路徑中有中文字符,也許不能正常加解密。


【網絡參考】

1、C#中Web.Config加密與解密的方法_C#教程  http://www.jb51.net/article/35996.htm

2、.NET加密配置文件connectionStrings節點 - http://www.cnblogs.com/zfanlong1314/p/3974950.html

3、web.config本地加密解密方法_http://jingyan.baidu.com
Tags: 數據庫連接 asp.net 字符串 加密 程序

文章來源:


ads
ads

相關文章
ads

相關文章

ad