有需求或技術問題可以隨時跟我連絡 (MSN上線時)

2009年8月24日 星期一

保護(加密) 應用程式組態檔 (App.config)

VS2005中提供的一個方便的功能就是[專案]中->[Properties]->[Settings.settings],一個方常方便的功能,提供了User層級及Application層級的應用程式設定值設定.

可以透過VS2005的功能修改及讀取,甚至是Reset為原始值.(下兩圖所示)

2009-8-24 上午 09-34-20

2009-8-24 上午 09-49-59

  但是有時候不想要讓使用者動到Application層級的設定值,或是讓人家知道程式的重要設定值,你可以進行加密的動作,像是下圖

2009-8-24 上午 09-26-23

以下是一個簡單的範例Step by Step教你達成...

(1)建立你的應用程式及設定你的Application Setting

2009-8-24 上午 10-09-512009-8-24 上午 10-12-30

(2)在Form1建構式中加入這行

this.Text = MyDemo.Properties.Settings.Default.MyApplicationName;

下圖所示

2009-8-24 上午 10-23-39

(3)新增一個安裝程式類別 如下圖

2009-8-24 上午 10-30-47

2009-8-24 上午 10-32-25

2009-8-24 上午 10-33-15

2009-8-24 上午 10-33-42

(4)於安裝程式類別 override Install Method & Add ProtectSection Function

using System.Configuration;

public override void Install(System.Collections.IDictionary stateSaver)
{
    base.Install(stateSaver);

    //get Protected Configuration Provider name from custom action parameter
    string sectionName = this.Context.Parameters["sectionName"];

    //get Protected Configuration Provider name from custom action parameter
    string provName = this.Context.Parameters["provName"];

    // get the exe path from the default context parameters
    string exeFilePath = this.Context.Parameters["assemblypath"];

    //encrypt the configuration section
    ProtectSection(sectionName, provName, exeFilePath);
}
private void ProtectSection(string sectionName, string provName, string exeFilePath)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(exeFilePath);
    ConfigurationSection section = config.GetSection(sectionName);

    if (!section.SectionInformation.IsProtected)
    {
        //Protecting the specified section with the specified provider
        section.SectionInformation.ProtectSection(provName);
    }
    section.SectionInformation.ForceSave = true;
    config.Save(ConfigurationSaveMode.Modified);
}

2009-8-24 上午 10-41-23

(5)打開app.config 並加入下面Section

<configProtectedData>
    <providers>
      <add useMachineProtection="true" name="DPAPIProtection"
          type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration,&#xD;&#xA;  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </providers>
  </configProtectedData>

2009-8-24 上午 10-45-58 

(6)新增一安裝專案(加密部分需安裝後才會看的出來)2009-8-24 上午 10-48-202009-8-24 上午 10-49-59 2009-8-24 上午 10-50-50 (7)修改安裝專案內容

2009-8-24 上午 10-54-532009-8-24 上午 10-58-02 2009-8-24 上午 10-59-182009-8-24 上午 11-04-532009-8-24 上午 11-05-12 修改屬性內容如下

/sectionName="applicationSettings/MyDemo.Properties.Settings" /provName="DPAPIProtection"

2009-8-24 上午 11-11-45

(8) Add Ref System.Configuration

2009-8-24 上午 11-18-18 2009-8-24 上午 11-19-04

(9) 編譯程式 (如果有按上面步驟操作應該會編譯成功)

2009-8-24 上午 11-15-35

(10)安裝應用程式

2009-8-24 上午 11-26-19

安裝完後,大功告成...

 

確認結果

2009-8-24 上午 11-29-44

2009-8-24 上午 11-31-17

範例程式[MD5 : c77f290441698787fc94d3325a2b41b4]

Source Code[MD5 : 4339ec62e8bfed90c3d6efa177152456]



沒有留言:

張貼留言