[C#.NET][VB.NET] 保護 應用程式 組態設定 / Protect Application Configurable
此篇延續上一篇[C#.NET][VB.NET] 何謂 應用程式 組態設定 Application Configurable
1.組態設定若使用未經加密,若有權限的人讀取該檔案,裡面的敏感的內容就會由此洩露,所以加密敏感內容是必須要做的。
2.使用SectionInformation 類別中的ProtectSection方法加密,以下為ProtectSection方法所提供的Provider。
2.1DpapiProtectedConfigurationProvider 類別
2.2RsaProtectedConfigurationProvider 類別
3.加密後的組態檔,應用程式依然仍可正常讀取到組態檔內容,但使用其它程式卻無法直接讀取內容了。
4.測試時請執行"CS_AppConfig\CS_AppConfig\CS_AppConfig\bin\Debug\CS_AppConfig.exe"應用程式,並觀察"CS_AppConfig.exe.Config"是否有無變化,千萬不要用VS來讀取app.config。
5.若有寫入組態勢,別忘了要呼叫Save方法。
6.以下範例包含:如何保護組態?如何列舉區段內容?如何取得加密的Provider?
C#完整範例
//如何保護組態 private void button6_Click(object sender, EventArgs e)
{ //1.引用類別開啟設定檔 Configuration cf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//2.選擇保護的區段 SectionInformation si = cf.AppSettings.SectionInformation;
//3.判斷是否有保護 if (si.IsProtected) { si.UnprotectSection();
button6.Text = "保護"; }
else { //4.選擇保護的Provider si.ProtectSection("DataProtectionConfigurationProvider"); //si.ProtectSection("RsaProtectedConfigurationProvider"); button6.Text = "解除保護"; }
cf.Save();
}
//如何列舉區段內容 private void button7_Click(object sender, EventArgs e)
{ //1.將區段內容帶入集合 NameValueCollection nvc = ConfigurationManager.AppSettings;
Int32 con = 0;
//2.取得集合的列舉 IEnumerator SetIE = nvc.Keys.GetEnumerator();
//3.顯示列舉內容 while (SetIE.MoveNext()) { Console.WriteLine("Item:{0} Value:{1}", nvc.Keys[con], nvc[con]); this.listBox1.Items.Add("Item:" + con + nvc.Keys[con] + " Value:" + "[" + con + "]" + nvc[con]);
con += 1;
}
}
//如何取得加密的Provider private void button8_Click(object sender, EventArgs e)
{ //1.引用類別開啟設定檔 Configuration cf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//2.選擇保護的區段 SectionInformation sInfo = cf.AppSettings.SectionInformation;
//3.取得區段的保護提供者 ProtectedConfigurationProvider pcp = sInfo.ProtectionProvider;
//4.判斷是否有保護 if (pcp == null)
{ Console.WriteLine("Protection provider is null"); this.listBox1.Items.Add("Protection provider is null");
}
else { //取得Provider Console.WriteLine("Protection provider: {0}", pcp.ToString()); this.listBox1.Items.Add("provider : " + pcp.ToString());
}
}
範例下載:
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET