热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对hishop商城web.config加密,和解密码详细说明

可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码、数据库连接字符串和加密密钥)
可以使用受保护配置来加密 Web 应用程序配置文件(如 Web.config 文件)中的敏感信息(包括用户名和密码、数据库连接字符串和加密密钥)。对配置信息进行加密后,即使攻击者获取了对配置文件的访问,也可以使攻击者难以获取对敏感信息的访问,从而改进应用程序的安全性。 针对asp.net 2.0的应用程序的数据库链接字符串进行加密:例如,未加密的配置文件中可能包含一个指定用于连接到数据库的连接字符串的节,如下面的示例所示:











ASP.NET 2.0 中有一个新的安全特性.可以对 Web.config 文件中的任何配置节进行加密处理,可以通过手工运行工具aspnet_regiis或者编程来完成这个工作。如果你可以直接访问你的Web 服务器,你可以通过运行如下的命令行: cd %windows%/Microsoft.NET/Framework/versionNumber aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" –prov RsaProtectedConfigurationProvider -pd section


对配置节进行解密。此参数采用下面的可选参数: · -app virtualPath 指定应该在包含路径的级别进行解密。 · -location subPath 指定要解密的子目录。 · -pkm 指定应该对 Machine.config 而非 Web.config 文件进行解密。




-pdf section webApplicationDirectory


对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行解密。




-pe section


对指定的配置节进行加密。此参数采用下面的可选修饰符: · -prov provider 指定要使用的加密提供程序。 · -app virtualPath 指定应该在包含路径的级别进行加密。 · -location subPath 指定要加密的子目录。 · -pkm 指定应该对 Machine.config 而非 Web.config 文件进行加密。




-pef section webApplicationDirectory


对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行加密。


如果你是使用虚拟主机等不能访问物理的服务器,你仍然能够通过编程方式加密的连接字符串:
 1 Configuration config = Configuration.GetWebConfiguration(Request.ApplicationPath);


2 ConfigurationSection section = config.Sections["connectionStrings"];


3 section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");;


4 config.Update ();或者 config.Save();






//加密web.Config中的指定节
private void ProtectSection(string sectionName)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && !section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}
}

//解密web.Config中的指定节
private void UnProtectSection(string sectionName)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.GetSection(sectionName);
if (section != null && section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
config.Save();
}
}







现在, 使用受保护配置对连接字符串值进行加密的配置文件不以明文形式显示连接字符串,而是以加密形式存储它们,如下面的示例所示: 











http://www.w3.org/2001/04/xmlenc#Element
"


xmlns="
http://www.w3.org/2001/04/xmlenc
#">



http://www.w3.org/2001/04/xmlenc#tripledes-cbc
" />



http://www.w3.org/2000/09/xmldsig
#">



http://www.w3.org/2001/04/xmlenc
#">



http://www.w3.org/2001/04/xmlenc#rsa-1_5
" />



http://www.w3.org/2000/09/xmldsig
#">


RSA Key








RXO/zmmy3sR0iOJoF4ooxkFxwelVYpT0riwP2mYpR3FU+r6BPfvsqb384pohivkyNY7Dm4lPgR2bE9F7k6TblLVJFvnQu7p7d/yjnhzgHwWKMqb0M0t0Y8DOwogkDDXFxs1UxIhtknc+2a7UGtGh6D


i3N572qxdfmGfQc7ZbwNE=

















KMNKBuV9nOid8pUvdNLY5I8R7BaEGncjkwYgshW8ClKjrXSM7zeIRmAy/cTaniu8Rfk92KVkEK83+UlQd+GQ6pycO3eM8DTM5kCyLcEiJa5XUAQv4KITBNBN6fBXsWrGuEyUDWZYm6Eijl8DqRDb


11i+StkBLlHPyyhbnCAsXdz5CaqVuG0obEy2xmnGQ6G3Mzr74j4ifxnyvRq7levA2sBR4lhE5M80Cd5yKEJktcPWZYM99TmyO3KYjtmRW/Ws/XO3z9z1b1KohE5Ok/YX1YV0+Uk4/yuZo0Bjk+rErG505YMfRVtxSJ4ee418


ZMfp4vOaqzKrSkHPie3zIR7SuVUeYPFZbcV65BKCUlT4EtPLgi8CHu8bMBQkdWxOnQEIBeY+TerAee/SiBCrA8M/n9bpLlRJkUb+URiGLoaj+XHym//fmCclAcveKlba6vKrcbqhEjsnY2F522yaTHcc1+wXUWqif7rSIPhc0+


MT1hB1SZjd8dmPgtZUyzcL51DoChy+hZ4vLzE=























如果是自己的主机可以这么做,如果不是,每次加密都要把密钥告诉对方,工作量大,也不方便


通常而言,使用aspnet_regiis加密的web.config,但拷到另一台机器上后无法访问,这是因为密钥容器未被一起移植。
1.创建一个RSA密钥容器
aspnet_regiis -pc "MyKeys" -exp



2.授予asp.net标识对RSA容器的访问权限
aspnet_regiis -pa "MyKeys" "NT AUTHORITY/NETWORK SERVICE"



3.在Web.config 中指定加密保护提供程序(Provider)


type="System.Cofiguration.RsaProtectedConfigurationProvider"
keyContainerName="MyKeys"
useMachineContainer="true" />




4. 加密
aspnet_regiis -pe "connectionStrings" -app "/MyApp" -prov "MyProvider"




5. 导出RSA 密钥容器
aspnet_regiis -px "MyKeys" "c:/keys.xml" -pri


6. 删除RSA密钥容器
aspnet_regiis -pz "MyKeys"

7.从XML中导入RSA 密钥容器
aspnet_regiis -pi "MyKeys" "c:/keys.xml"

8.授予asp.net标识对RSA容器的访问权限
aspnet_regiis -pa "MyKeys" "NT AUTHORITY/NETWORK SERVICE"







.net 2.0下加密和解密web.config文件中的某个section

aspnet_regiis –pef appSettings C:/Inetpub/wwwroot/website

aspnet_regiis –pdf appSettings C:/Inetpub/wwwroot/website 


不过本人以为对web.config文件加密就应该每台机器的单独加密,因为导出导入密钥容器的工作更大,还不如单独加密效率高,安全性也要高一些。


.利用aspnet_regiis.exe工具加解密 

步骤:
1.先在本地生成RSA容器(有关RSA的详细操作,可参见http://msdn.microsoft.com/zh-cn/library/yxw286t2(VS.80).aspx )
aspnet_regiis.exe -pc "JimmyKeys" -exp
注:JimmyKeys为容器名字,可随便改


2.再将RSA导出到xml文件
aspnet_regiis.exe -px "JimmyKeys" "c:/JimmyKeys.xml"


3.在web.config中增加一节,一般放在之前就可以了,如下


type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
keyContainerName="JimmyKeys"
useMachineContainer="true" />




...

4.将web.config加密
aspnet_regiis.exe -pef "appSettings" "c:/website" -prov "JimmyRSAProvider" 

解密:
aspnet_regiis.exe -pdf "appSettings" "c:/website"


5.部署到远程服务器(1台或多台)
a.将网站文件与JimmyKeys.xml(也就是导出的RSA容器文件)先上传到服务器,同时导入RSA
aspnet_regiis.exe -pi "JimmyKeys" "c:/JimmyKeys.xml"


b.确认服务器上aspx登录所用的默认帐号
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
随便建一个aspx,把上一行代码贴到里面就可以了,IIS5环境下输出的是ASPNET,IIS6环境下输出的是NETWORK SERVICE,IIS7下没试过也不知道输出的是啥玩意儿


c.授于RSA窗口的读取权限给b中的默认帐号
aspnet_regiis.exe -pa "JimmyKeys" "NETWORK SERVICE"


顺便把刚才这些个操作的命令整理成几个批处理
1.本机bat(新建RSA容器,导出容器,加密web.config)
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -pz "JimmyKeys" 
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -pc "JimmyKeys" -exp
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -px "JimmyKeys" "c:/JimmyKeys.xml"
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -pef "appSettings" "c:/website" -prov "JimmyRSAProvider"


2.远程服务器bat(导入RSA容器,授权)
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -pi "JimmyKeys" "c:/JimmyKeys.xml"
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -pa "JimmyKeys" "NETWORK SERVICE"
 


加密前:

providerName="System.Data.SqlClient" />

加密后:

http://www.w3.org/2001/04/xmlenc#Element
"
xmlns="http://www.w3.org/2001/04/xmlenc#">
http://www.w3.org/2001/04/xmlenc#tripledes-cbc
" />
http://www.w3.org/2000/09/xmldsig#">
http://www.w3.org/2001/04/xmlenc#">
http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
http://www.w3.org/2000/09/xmldsig#">
Rsa Key



breSi2wD4X4CAKh0puzhYtyltmR3cp9JfEE8Yw03NeWGZCOoEvDuxAceKLEsmYx8r/tI5NsZxOmY20pQzD1KvGELzz4rhkEPE9LKTAwyKNhqzMPFoRnjsdGTvs6JhrvVat9rdvgKbfTvVLXuvpXgSeNB0T6XJWq
/vOIU7KTyFjk=






c4HD+EfJl//pv4eEzT938aWYhLyPBUt8lbNWf4Y4c6tewWLNBTwgYXtxPh6TnF8ne6s9H5C/AwXy/3JECuNEd8YGOO+RDhxw8NySd8vUc53+iUiHW5TLs/aoIvy8k1yOfLWGKFFWPtoX4F4gMTS+MAmhkiHQ46p
H2VyjyprNsl8LE2pGNjDOJnDeGYq+wkn2iw968+qjuTCibGJn6h6iGYGHYmkYUrgRzfo3iIZu+eCWE2IqCP+s58eQRjU3MxJ2BqeUU9HaKy4=




同样,这种方式加密后,aspx读取节点时也无需任何解密处理,代码不用做任何修改

注意:并不是所有的节点都能加密,ASP.NET 2.0仅支持对Web.config的部分配置节进行加密,以下配置节中的数据是不能进行加密的:
•
•
•
•
•
•
•
•
•
•

另外,除了AppSettings和ConnectionStrings以外的其它节点,可以这样写:
aspnet_regiis.exe -pef "system.serviceModel/behaviors" "d:/website/cntvs/" 

即对下的节点加密,这一节点同样适用于代码方式加密,经过多次尝试,似乎除了AppSettings和ConnectionStrings以外的其它节点,只能支持二级节点。

象以下写法:
aspnet_regiis.exe -pef "system.serviceModel/behaviors/endpointBehaviors" "d:/website/cntvs" 
运行时会报错:

未找到配置节“system.serviceModel/behaviors/endpointBehaviors”。


转载的博主链接:http://blog.csdn.net/educast/article/details/6546628


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
author-avatar
歪歪Doris
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有