ASP.NET 下的Web.config 提供了很方便的系統參數設定方式,但是太方便的東西有時後卻得為它另外做一些額外的工作來處理,比如說你可能會在Web.config裡儲存資料庫的連線字串同時又把帳號密碼寫了進去,雖然一般人並不能直接在瀏覽器上輸入網址來偷取Web.confg檔但是心裡總是毛毛的,而且在大部份機構的IT部門都會有一條這樣的規定。

「所有帳號密碼及老闆的情婦身份資料都不能以明碼方式儲存」

所以你想要讓他們掏錢買你做的系統就得要有辦法加密Web.config裡的資料,否則要是大老闆被捉姦在床絕對會認為是你出賣他。

ASP.NET 2.0中有兩個Provider可以幫助你完成保護資料的需求。
他們分別是:
  • RsaProtectedConfigurationProvider
  • DataProtectionConfigurationProvider
現在就讓我們來看看到底要用什麼方法來加解密資料。




使用aspnet_regiis.exe加解密

aspnet_regiis.exe是一個強大的IIS管理工具,如果你已經安裝好.Net framework 2.0的話,他就在 %windir% \Microsoft.Net\Framework\v2.0.50727目錄下,直接在命令提示字元視窗輸入下面指令。

connectionStrings代表你要加密的區段,本文以connectionStrings為範例你也可以視情況加密appSettings等其它區段資料。
applicationName代表你的Web應用程式的虛擬目錄名稱。

下完指令回去看看Web.config是否有些變化,順利的話connectionStrings區段應該會看起來像是這個樣子。

太好了,真是亂成一團!另外要解密還原原來的字串也非常簡單,只需要下面的指令。

如果你夠聰明的話應該會發現他跟加密時的指令只差在-pd的參數而已,如果想知道aspnet_regiis的詳細使用說明請輸入aspnet_regiis /? 或是到MSDN上去翻一翻吧。

「等等,我不能叫使用者去下什麼狗屁指令啊,他除了打電話來煩我之外什麼都不會做。」
嗯,雖然aspnet_regiis非常好用但是使用者就是不會用,所以我們還是得弄出更簡的方法讓使用者可以自己玩才行。




使用程式碼加解密

開始動手吧,先做一個操作用的網頁並且在上面放兩個按鈕,一個用來加密字串一個用來解密字串,然後在按鈕的Click事件中寫入下面的程式。


現在使用者只要按個按鈕就能完成加解密的動作了,這下他可沒話說了吧。