转载自:www.csdn.net

客户一般不认同这种在config文件中保存数据的做法。具体点说,客户关心的是如何在文本文件中保存敏感信息。碰到这类客户时,笔者会告诉他们如果能够其他人可以从他们的网络服务器中移除文本文件,那么他们的问题就连本人都无法解决。

  不过客户并未意识到这一论点的必要性。事实上,他们有自己的观点。有相当一部分的安全漏洞是机构中的人员自己造成的,而由此带来的安全问题防不胜防。因此笔者建议为web.config文件加密。

  局部加密

  下面给出的代码是用来加密web.config文件中的指定部分。首选要用Configuration对象的Sections集合选取一个部分。在这个示例中,选择的是connectionStrings部分:

Dim configFile As System.Configuration.Configuration
  Dim configSection As ConfigurationSection

  configFile =System.Web.Configuration.WebConfigurationManager. _

  OpenWebConfiguration(Request.ApplicationPath)

  configSection = configFile.Sections("connectionStrings")

  这段代码假设是在网页上运行,因此可以使用Request对象中的ApplicationPath属性来获取到达web.config文件夹的物理路径。如果你想创建一个实用工具,就需要将发送到OpenWebConfiguration方法的路径编为硬式代码。

  现在已经拥有了要加密的部分,我们可以对其加密,指定需要使用的加密方案。最后一步是将加密后的版本保存到配置文件中:

  configSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider")

  configFile.Save()

  web.config文件中的结果如下所示:

< connectionStrings
  configProtectionProvider="DataProtectionConfigurationProvider">

  < EncryptedData>

  < CipherData>

  < CipherValue>...encrypted data... < /CipherValue>

  < /CipherData>

  < /EncryptedData>

  < /connectionStrings>


如果你在思考如何将关键信息保存到Web.config文件中,那么你应该对这类文件进行加密。
  好的一方面是当你使用ConfigurationManager的ConnectionString集合来检索加密连接字符串时,连接字符串会自动为你解密。不论connectionStrings是否被加密,该代码都有效:

  Dim cnStr As String

  cnStr = System.Web.Configuration.WebConfigurationManager. _

  ConnectionStrings("Northwind").ConnectionString

   由于是使用网络服务器的独占密钥为字符串加密,即便文件被人从网站中窃取,它也不能在网络服务器以外的地方被解密。这意味着如果你不将文件转送到伺服 器,那也同样不能将其解密。如果你是在测试服务器中对连接字符串加密,那么就要将页面转送到伺服器中,ASP.NET是不能够用伺服器的独占密钥为字符串 解密的。

  有时,你只需要检查文件中的内容来为web.config解密。下面的代码就负责这项工作:

   Dim configFile As System.Configuration.Configuration
  Dim configSection As ConfigurationSection

  configFile = System.Web.Configuration.WebConfigurationManager. _

  OpenWebConfiguration(Request.ApplicationPath)

  configSection = configFile.Sections("connectionStrings")

  configSection.SectionInformation.UnProtectSection()

  configFile.Save()

  命令行加密

  如果你不想使用代码,可以用aspnet_regiis工具为web.config文件的局部来加密或解密。你必须传送这一工具来指定加密部分以及配置文件文件夹的路径名称,而且还要传送-prov参数来指定加密方案:

  aspnet_regiis.exe -pef section physical_directory -prov provider

  这一示例为c:\NorthwindCRM文件夹中的配置文件configurationStrings部分进行加密:

  aspnet_regiis.exe -pef configurationStrings c:\NorthwindCRM

  -prov "RsaProtectedConfigurationProvider"

  你还可以使用aspnet_regiis工具来解密,或者可以用来确保没有人能将文本文件从你的网络服务器中偷走