[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