且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Enterprise Library2.0中加密数据库连接字符串

更新时间:2022-09-21 18:09:12


看了SHY520写的关于Data Access Application Block的文章,写得不错,忽略了一点就是如何去加密数据库连接字符串,这儿我简单的介绍一下。我们知道,在Enterprise Library1.1中加密连接字符串,需要依赖于Cryptography Application Block.NET Framework2.0中已经内置了这项功能,通过Configuration命名空间下的一些类来完成,支持两种类型的加密:

DPAPIProtectedConfigurationProvider:使用Windows Data Protection API (DPAPI)
RsaProtectedConfigurationProvider:使用RSA算法
下面来看一下具体的实现方法,假设已经有这样的一个配置文件:
Enterprise Library2.0中加密数据库连接字符串<?xml version="1.0" encoding="utf-8"?>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
<configuration>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串  
<configSections>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串  
</configSections>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串  
<dataConfiguration defaultDatabase="QuickStarts" />
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串  
<connectionStrings>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    
<add name="QuickStarts" connectionString="Database=EntLibQuickStarts;Server=RJ-097;Integrated Security=SSPI;"
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串      providerName
="System.Data.SqlClient" />
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串  
</connectionStrings>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
</configuration>
Enterprise Library2.0中加密数据库连接字符串
1.添加对System.Configuration.dll的引用
Enterprise Library2.0中加密数据库连接字符串2.在Program.cs中引入命名空间
Enterprise Library2.0中加密数据库连接字符串using System.Configuration;
3.编写相关的代码:
Enterprise Library2.0中加密数据库连接字符串/// <summary>
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
/// Author:TerryLee
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
/// From:[url]http://terrylee.cnblogs.com[/url]
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
/// </summary>

Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
static void EncryptConfiguration()
Enterprise Library2.0中加密数据库连接字符串
{   
Enterprise Library2.0中加密数据库连接字符串    
// 使用什么类型的加密
Enterprise Library2.0中加密数据库连接字符串

Enterprise Library2.0中加密数据库连接字符串    
string provider = "RsaProtectedConfigurationProvider";
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    Configuration config 
= null;
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    config 
= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    
// 加密连接字符串
Enterprise Library2.0中加密数据库连接字符串

Enterprise Library2.0中加密数据库连接字符串    ConfigurationSection section 
= config.ConnectionStrings;
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    
if ((section.SectionInformation.IsProtected == false&&
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串        (section.ElementInformation.IsLocked 
== false))
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    
{
Enterprise Library2.0中加密数据库连接字符串      section.SectionInformation.ProtectSection(provider);
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串        section.SectionInformation.ForceSave 
= true;
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串        config.Save(ConfigurationSaveMode.Full);
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    }

Enterprise Library2.0中加密数据库连接字符串}
该方法的调用放在程序的主程序的入口点:
Enterprise Library2.0中加密数据库连接字符串[STAThread]
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串
static void Main()
Enterprise Library2.0中加密数据库连接字符串
{
Enterprise Library2.0中加密数据库连接字符串    
// Protect the Connection Strings
Enterprise Library2.0中加密数据库连接字符串

Enterprise Library2.0中加密数据库连接字符串    EncryptConfiguration();
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串    Application.Run(
new MainForm());
Enterprise Library2.0中加密数据库连接字符串
Enterprise Library2.0中加密数据库连接字符串}
运行程序后,打开配置文件可以看到,连接字符串已经变成密文了。最后注意一点:加密的字符串在被加载到内存的时候解密。














本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67624 ,如需转载请自行联系原作者