看了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>

.添加对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());

}

运行程序后,打开配置文件可以看到,连接字符串已经变成密文了。最后注意一点:加密的字符串在被加载到内存的时候解密。

最新文章

  1. [转]SpringMVC Controller介绍及常用注解
  2. JS正则表达式验证账号、手机号、电话和邮箱
  3. Vs2013 头文件注释
  4. Metasploit更新
  5. phpcms开启、关闭在线编辑模板的方法
  6. Java IO包装流如何关闭?
  7. Eclipse中没有andriod问题解决方法
  8. [工作技能]SVN
  9. andorid 进度条
  10. IgnoreRoute——注册路由
  11. POJ_1088 滑雪(记忆型DP+DFS)
  12. POJ-3468-A Simple Problem with Integers(区间更新,求和)-splay或线段树
  13. linux下vim 查找命令
  14. javascript 原型及原型链详解
  15. PS 图像调整算法——自动色阶 (Auto Levels)
  16. Java小技巧输出26个英文字母
  17. SpringBoot启动源码探究---getRunListener()
  18. MyBatis 配置多数据源
  19. python3编写发送四种http请求的脚本
  20. Python2 错误记录1File &quot;&lt;string&gt;&quot;, line 1, in &lt;module&gt; NameError: name &#39;f&#39; is not defined

热门文章

  1. asp.net批量发布博客到各大博客平台
  2. Selenium Tutorial (2) - Selenium IDE In Depth
  3. linux C 数组操作
  4. dialog组件
  5. linux 安装oracle 11g
  6. Android下二维码的扫描
  7. js获取客户端IP及地理位置
  8. Android-setDefaultKeyMode方法
  9. HDU 5375 Gray code
  10. 【windows核心编程】DLL相关(3)