asp.net对连接字符串加密解密

在部署项目的时候,我们总是需要加密配置文件中的ConnectionStrings或者appSettings配置节,从而防止用户数据库被泄漏。.NET Framework使用提供程序模型来加密配置节,框架包含两个ProtectedConfigurationProvider:一个是RsaProtectedConfigurationProvider另一个DpapiProtectedConfigurationProvider.  前者是默认的提供程序,我们尽可能去使用该种,因为它支持导入\导出加密的密钥,换句话说,可以从一个web服务器移动配置节到另一个web服务器,例如可以在你开发的机子上加密配置节,然后将应用部署到产品服务器。
  如果使用后者加密配置节,那么就不能在另一个web服务器解密配置节,如果希望在不同的服务器之间移动配置文件,那么应现在员服务器上解密,再在目标服务器上重新加密配置文件。
1.使用aspnet_regiis.exe工具加密配置节
对于加密web配置文件中一个配置节来说,这是最方便的手段,该工具位于

1 C:\Windows\Microsoft.NET\Framework\v2.0.50727


目录下
我们可以手工在cmd dos窗口中敲入路径使用该工具或者直接在开始菜单中找到Microsoft Visual Studio 2005-》Visual Studio Tools-》Visual Studio 2005 命令提示,打开该dos窗口,这里不需要输入aspnet_regiis.exe工具的路径
假如我们有个网站在D:\Projects\mywebsite中
我们需要加密该网站的webconfig的appSettings配置节的方法如下

1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"


以上我们使用的是绝对路径,当然也可以使用相对路径

1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"


-app表示指定应用程序的虚拟路径

再次打开该web.config,发现appSetting配置节已经加密了。


当然我们需要加密connectionStrings配置节只要加上面代码的 appSetting替换下就ok了
我们注意下 -pef(Protect Encrypt Filepath) 这个选项,它是用来加密指定路径下的web.config文件的指定配置节
当然还有解密啦....
我们可以使用-pdf选项解密配置节,还拿上面的例子

1 aspnet_regiis -pdf appSettings "D:\Projects\mywebsite"


虚拟路径

1 aspnet_regiis -pd appSettings -app /mywebsite
 


  假设我们使用RsaProtectedConfigurationProvider加密配置文件,现在需要从一个服务器复制一个加密配置文件到另一个服务器,则必须复制加密配置文件的密钥到新的服务器,否则应用程序就不能在新服务器读取加密后的配置文件
默认情况下,存放密钥的容器在下面的文件夹下:

1 \Document and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys


当然,你很有可能找不到该文件夹(o(∩_∩)o ),现在比如360的搬移打文件等工具,鬼知道,那些文件夹会不会移动到别的地方去了....慢慢找下

我的是在

1 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys


在MachineKeys目录下会有一些数字和字母组成的系统文件,这就是我们想找的哈


我们还必须配置一个新的密钥容器,导入密钥容器到新服务器,需要依次完成下面几个步骤


1-创建一个新的密钥容器

1 aspnet_regiis -pc "SharedKeys" -exp


SharedKeys是新的密钥容器,-exp说明该容器的密钥可以导出


2-配置应用程序使用新的密钥容器
web.config:

1 <configuration>
2 <configProtectData defaultProvider="MyProtectedConfigurationProvider">
3 <providers>
4 <add name="MyProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider" cspProviderName="" useMachineContainer="true" useOAEP="false" keyContainerName="SharedKeys"/>
5 </providers>
6 </configProtectedData>
7 </configuration>


3-导出SharedKeys容器中的密钥到一个keys.XML文件中

1 aspnet_regiis -px "SharedKeys" keys.xml -pri


4-把刚创建的keys.xml文件复制到目标服务器上,并导入密钥

1 aspnet_regiis -pi "SharedKeys" keys.xml

5-赋予asp.net应用程序访问密钥容器的权限

1 aspnet_regiis -pa "SharedKeys" "ASPNET"

posted @ 2012-04-09 21:18  wayshan  阅读(2954)  评论(3编辑  收藏  举报