Enterprise Library2.0中加密數據庫連接字符串

 
 Enterprise Library2.0中加密數據庫連接字符串

看了SHY520寫的關於Data Access Application Block的文章,寫得不錯,忽略了一點就是如何去加密數據庫連接字符串,這兒我簡單的介紹一下。我們知道,在Enterprise Library1.1中加密連接字符串,需要依賴於Cryptography Application Block。.NET Framework2.0中已經內置了這項功能,通過Configuration命名空間下的一些類來完成,支持兩種類型的加密:

DPAPIProtectedConfigurationProvider:使用Windows Data Protection API (DPAPI)

RsaProtectedConfigurationProvider:使用RSA算法

下面來看一下具體的實現方法,假設已經有這樣的一個配置文件:

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  
<configSections>

    
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />

  
</configSections>

  
<dataConfiguration defaultDatabase="QuickStarts" />

  
<connectionStrings>

    
<add name="QuickStarts" connectionString="Database=EntLibQuickStarts;Server=RJ-097;Integrated Security=SSPI;"

      providerName
="System.Data.SqlClient" />

  
</connectionStrings>

</configuration>

1.添加對System.Configuration.dll的引用

2.在Program.cs中引入命名空間
using System.Configuration;

3.編寫相關的代碼:
/**//// <summary>

/// Author:TerryLee

/// From:http://terrylee.cnblogs.com

/// </summary>

static void EncryptConfiguration()
{   
    
// 使用什麼類型的加密

    
string provider = "RsaProtectedConfigurationProvider";

    Configuration config 
= null;

    config 
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

    
// 加密連接字符串

    ConfigurationSection section 
= config.ConnectionStrings;

    
if ((section.SectionInformation.IsProtected == false&&

        (section.ElementInformation.IsLocked 
== false))

    {
      section.SectionInformation.ProtectSection(provider);

        section.SectionInformation.ForceSave 
= true;

        config.Save(ConfigurationSaveMode.Full);

    }
}

該方法的調用放在程序的主程序的入口點:
[STAThread]

static void Main()
{
    
// Protect the Connection Strings

    EncryptConfiguration();

    Application.Run(
new MainForm());

}

運行程序後,打開配置文件可以看到,連接字符串已經變成密文了。最後注意一點:加密的字符串在被加載到內存的時候解密。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章