zoukankan      html  css  js  c++  java
  • Enterprise Library 中加密数据库连接字符串

    看了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());

    }

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

  • 相关阅读:
    Linux I2C设备驱动编写(一)
    Device Tree常用方法解析
    Linux查看CPU型号及内存频率及其它信息的命令
    编译错误error: invalid storage class
    Mysql技术内幕——表&索引算法和锁
    mysql 锁
    MySQL 索引方式
    通过show status 来优化MySQL数据库
    linux shell 字符串操作(长度,查找,替换)详解
    bash中将字符串split成数组的方法
  • 原文地址:https://www.cnblogs.com/sczw-maqing/p/3368680.html
Copyright © 2011-2022 走看看