我們在寫C#應用程序時,在工程文件中放置一個app.config,程序打包時,系統會將該配置文件自動編譯為與程序集同名的.exe.config 文件。作用就是應用程序安裝后,只需在安裝目錄中找到該文件,需改字符串內容,就可以改變運行參數,而不用修改源程序代碼。例如:可以使用配置文件保存數據庫連接字符串;在應用程序中顯示變動的文字信息等等.因為對其使用方法的不了解,大多數人選擇了自己重建配置文件並自行管理,實際上這個文件是可以被用戶操作的。App.config文件為Xml文檔格式,可在文件中添加任意數量的字符串,應用程序在運行時可以讀取這些字符串。
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="connStr" connectionString="Data Source=XXXXXXXX;Initial Catalog=dbVisitorMS;User ID=sa;Password=xxxxxxxxxxxx" providerName="system.Data.SqlClient" /> </connectionStrings> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
默認情況下,我們需要對App.config文件里的connectionStrings片斷進行加密處理,ASP.NET IIS 注冊工具 (Aspnet_regiis.exe)可以勝任這個工作,但這個工具只能針對ASP.NET的Web.config文件,難道我們就沒有辦法了嗎?答案當然是否定的。
配置選項
-pdf section webApplicationDirectory 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行解密。
-pef section webApplicationDirectory 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行加密。
-pdf 和-pef 參數是對指定的物理目錄里的Web.config文件進行加密,我們可以先將App.config文件改名為Web.config,通過這兩個參數便可以“騙”過系統,讓它將指定的配置節進行加密,我們只需要將加密后的文件名改回App.config即可,我們來實驗一下:
第一步:先將目錄下的App.config改名為Web.config。
第二步:打開SDK命令提示,輸入命令:aspnet_regiis -pef "配置節" "目錄",以我的項目為例,加密前的config文件內容如下:

加密后
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings 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>p1KdppQmE7cW4dtA76tNFmBfvjwXP/OOJBBg1MDmietZJ+rriOFyHl0IJ61q6dQZNcB7JretgXA9+jH3gwQgZs9Cxalcjj9X6EtYJ4hhVEZq/e5pXMQ6nvcedBUjyU7J2Z8TKilzrlOPMvj+dCFwWQBEeEbUGODdL9p1Cl3c/n5Uv0Xv4lgiomocHCqEZZAvVV2If3GRsgqLV9ZRpKmHYWm9YoDJSBR5guW0+qB+c6b2JE71krXThSRgmLbgGbKV3O7LBAgbsnr6ONFTrHP1xXdnwzILxi0irEjda/kVm30Pkxw5+yi7zsq8X+aCV0sF953HmIKSJyyY9hE9tqUKmg==</CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>RFhmXoVyP8u9lCj9KJFSyeF+o00GFXvHJYwFPmhCXcGQY6P+Us3YeY0lAfF0LNqaiOvNd7yXk7C7zEkYO0r7AsAGOLidckOznNFyxnefGXrORWQgFmoxi8rkdUtlW0aZXTg2B9xUmxe8p1GdM7gMwe8m6yc98CnyEPxsFRdC8OkChFywFSQK0AR9P9hojEMkbsRUhDd3sHz0tKrX+a581uZrzpdnyDqGyY4t/0N/TfMX+ve5jg/vaiI18iLTJbm9+bU1qaAeIpYYWKRzWULhMsejn65v5LuK</CipherValue> </CipherData> </EncryptedData> </connectionStrings> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
由此可見,我們已經完成了任務,現在只需要將Web.config文件名改回App.config即可,在應用程序項目中無需對該文件進行解密操作,.NET框架會自動替我們完成,如果想解密該文件也很簡單,在SDK命令提示里輸入aspnet_regiis -pdf "配置節" "目錄"即可。
總結:App.config使用aspnet_regiis來加密只能騙騙外行,內行使用工具解密就可以了.但是對於一般用戶足夠了,寫的再看都有反編譯軟件可以看到大概