http://blog.csdn.net/jf_jifei/article/details/6527390
?
在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
- <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
- <EncryptedData>
- <CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAy1WyvzomB0WAlqYo+ogiigQAAAACAAAAAAADZgAAqAAAABAAAADbDjp+bAce//lsg/so66+8AAAAAASAAACgAAAAEAAAANlF3b73Kdupv/cAf4a9nPUwAQAAoTvrHdAjNjaJFEfiG7pD6sG8GMNJKGpnd4JLchu7W9XhOuPgG4C/LD9H9WQ9uF3t/0MoMI9tbrWdFJ1Yu5/e3PAV4RCbCvDlPD0VC7hxtDMqfRjQ+1OhTdk2woiSNpx0TzXwZE25o4vlXq/aYri1Wmlo2zyRqSkg0hQFQbObCf7lrgWEUjsv+pEOS5OVXcgNhFipVMy5iQ8sH5fNHmGg8gu5JlZQaOqYFG8ci7MGOebcQzR67krJXRBrs26lZtAj8lzf2bK+QcSqtU7Rt4C33JbLqisPL9xhfoUl9GvGTu5VS1S1H5VtErTeYXxnL7PTIr3cNjIbDMjI48LJfoOgtymT35KUdK3J0DxB68DqPaeK5QSEC/L0+6bizStRZ7BDnOngV/XfiVJnbSNYXX5IShQAAACuGn8QGUuQ4TOzkKcc891SV/CVDQ==</CipherValue>
- </CipherData>
- </EncryptedData>
- lt;/connectionStrings>
3.??? 解密
?? 解密該連接字符串也很簡單
?? aspnet_regiis.exe -pdf "connectionStrings" '你的web項目路徑"
?? 解密后的結果:
[xhtml] view plain copy
- <connectionStrings>
- <add name="Sql" connectionString="Data Source=.;Initial Catalog=MySchool;Integrated Security=True" />
- </connectionStrings>
4.??? 后臺代碼讀取配置文件web.config中數據庫連接字符串的方法:
[c-sharp] view plain copy
- using System.Configuation;??
- …??
- protected void Page_Load(object sender, EventArgs e)??
- {??
- ??? lblMessage.Text = ConfigurationManager.ConnectionStrings["Sql"].ToString();??
- }??
- …?
運行效果圖:
5.??? 在連接字符串的加密和解密的過程中,需要注意一下幾點。
- ???? 使用加密的連接字符串
??? 使用加密的連接字符串不需要編碼解密,ASP.NET會自動對加密內容進行解密。
- ???? 加密和解密在同一臺計算機上使用
??? 在加密過程中,使用了一個基于本機的密鑰。這就意味著加密和解密必須在同一臺計算機上進行,否則將不能解密。同時,在一臺計算機上加密的配置,在另一臺計算機上將不能正常使用。
- ???? 中文路徑問題
??? 該命令對中文支持不是很好。如果站點的路徑中有中文字符,也許不能正常加解密。