练习3:加密数据库连接信息
通过该练习,你将学会如何去加密数据库连接信息。
第一步
打开DataEx3.sln项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Data Access\exercises\ex03\begin,并编译。
第二步 加密数据库连接字符串
1
.在Enterprise Library1.1中加密连接字符串,需要依赖于Cryptography Application Block。.NET Framework2.0中已经内置了这项功能,通过Configuration命名空间下的一些类来完成,支持两种类型的加密:
DPAPIProtectedConfigurationProvider
:使用Windows Data Protection API (DPAPI)
RsaProtectedConfigurationProvider
:使用RSA算法
2
.选择ProductMaintenance项目,选择Project | Add Reference …菜单命令,在弹出的对话框中选择.NET页并添加如下程序集。
System.Configuration.dll
3
.在解决方案管理器中选择Program.cs文件,选择View | Code菜单命令,加入如下命名空间。
using
System.Configuration;
4
.在方法ProtectConfiguration中添加如下代码。
static
void
ProtectConfiguration()
{
// TODO: Protect the Connection Strings
string provider = "RsaProtectedConfigurationProvider";
Configuration config = null;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.ConnectionStrings;
if ((section.SectionInformation.IsProtected == false) &&
(section.ElementInformation.IsLocked == false))
{
// Protect (encrypt) the "connectionStrings" section.
section.SectionInformation.ProtectSection(provider);
// Save the encrypted section.
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
{
// TODO: Protect the Connection Strings
string provider = "RsaProtectedConfigurationProvider";
Configuration config = null;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.ConnectionStrings;
if ((section.SectionInformation.IsProtected == false) &&
(section.ElementInformation.IsLocked == false))
{
// Protect (encrypt) the "connectionStrings" section.
section.SectionInformation.ProtectSection(provider);
// Save the encrypted section.
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
第三步 运行应用程序
选择Debug | Start Without Debugging菜单命令并运行应用程序,注意该示例和练习2中的示例是一样的。在项目bin\Debug目录中打开ProductMaintenance.exe.config配置文件,注意到连接信息已经变成了密文。
<?
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 Instance" />
< 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 > xeuEp2HB0xd87DFM0p5UwO78QjRW6A/pb6kGJpS5Rl0F0jHAEPh8wz4Jroc1+/I7nvmsCo6a8wzju4Nyd5ZGF6KRZgx56P9wRgkUFtJPgDROrz1ASRSIrOfMjw4+1uedT+pl+IuF1EWgEH9Vb+/8A9xmbYWtMBAcR/f/quSC1nQ= </ CipherValue >
</ CipherData >
</ EncryptedKey >
</ KeyInfo >
< CipherData >
< CipherValue > DrwCnj8uCmkWOjLc2waTGX2pf8QKRFpegQbFv0zcVAwcCkZRvUVnIj9kXCLiIx+Pcbrz6H/fccbWxybAA+V7A4unJvDXegyZR1+dW7UqfDOAagTW67FC6iI3vatOpGCw30W+xpwhfgptCoFRNiCMWqxvpv++pywSK5SNfB7UZwpl90Q9dBHmmCIVyi/ZbS5JY2FLN68nRd9CHZmZLHv9opBm4DvMVdAXt7oKQ6tk9k4HJZzpUc1V8pWLQn7NQroA/4WpUDGGgk1gJ2HTBkP2L6wATzxTfQDgZbW/JIgrdollAQbO3/UEAvAnc0swoL/6BhWS5MW/9PxjuQK6GhsnSr4Dg7SEdsFPO2bTsAP/lAUeY5y9M3UxC1Q32IwMt8O4gz5ppNgYY7R8yKmvH7/S80/i61qJXvSJEQ/hQjx8V2R9okuBaN4XVgLUysmFWsOwxxHiGFyuSOECDWnr1c/5XwM7O85gVTzMELdM+N1jVFQTADXQmckOY1nZllRd3cA9CB1Qruqn/RxbGOFHT1F6y/4Cbfk7x1CKsmHx0iI0WNJ5iD3KYEq5kosGwWxrOI8C28BiXfEztwCzruSP6JpMbw== </ CipherValue >
</ CipherData >
</ EncryptedData >
</ connectionStrings >
</ configuration >
< 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 Instance" />
< 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 > xeuEp2HB0xd87DFM0p5UwO78QjRW6A/pb6kGJpS5Rl0F0jHAEPh8wz4Jroc1+/I7nvmsCo6a8wzju4Nyd5ZGF6KRZgx56P9wRgkUFtJPgDROrz1ASRSIrOfMjw4+1uedT+pl+IuF1EWgEH9Vb+/8A9xmbYWtMBAcR/f/quSC1nQ= </ CipherValue >
</ CipherData >
</ EncryptedKey >
</ KeyInfo >
< CipherData >
< CipherValue > DrwCnj8uCmkWOjLc2waTGX2pf8QKRFpegQbFv0zcVAwcCkZRvUVnIj9kXCLiIx+Pcbrz6H/fccbWxybAA+V7A4unJvDXegyZR1+dW7UqfDOAagTW67FC6iI3vatOpGCw30W+xpwhfgptCoFRNiCMWqxvpv++pywSK5SNfB7UZwpl90Q9dBHmmCIVyi/ZbS5JY2FLN68nRd9CHZmZLHv9opBm4DvMVdAXt7oKQ6tk9k4HJZzpUc1V8pWLQn7NQroA/4WpUDGGgk1gJ2HTBkP2L6wATzxTfQDgZbW/JIgrdollAQbO3/UEAvAnc0swoL/6BhWS5MW/9PxjuQK6GhsnSr4Dg7SEdsFPO2bTsAP/lAUeY5y9M3UxC1Q32IwMt8O4gz5ppNgYY7R8yKmvH7/S80/i61qJXvSJEQ/hQjx8V2R9okuBaN4XVgLUysmFWsOwxxHiGFyuSOECDWnr1c/5XwM7O85gVTzMELdM+N1jVFQTADXQmckOY1nZllRd3cA9CB1Qruqn/RxbGOFHT1F6y/4Cbfk7x1CKsmHx0iI0WNJ5iD3KYEq5kosGwWxrOI8C28BiXfEztwCzruSP6JpMbw== </ CipherValue >
</ CipherData >
</ EncryptedData >
</ connectionStrings >
</ configuration >
注意根据 Hands On Lab给出的时间建议,做完以上三个练习的时间应该为 30分钟。
更多Enterprise Library的文章请参考《Enterprise Library系列文章》
本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67632 ,如需转载请自行联系原作者