正则表达式匹配并替换字符串

王朝学院·作者佚名  2016-05-21
窄屏简体版  字體: 小  |  中  |  大  |  超大  

正则表达式匹配并替换字符串场景:

2012年在做广州地铁协同办公项目时,客户觉得明文的数据库链接用户密码配置在web.config里面不安全;其实.NET里的web.config在IIS中有所限制,对安全性还是有保障的。但是客户既然有这样稍微“变态”的需求,那我们就考虑怎么去把它实现吧。

存在的技术难点:

(1)web.config中配置的数据库链接用户密码必须是经过特殊加密的

(2)从第一点出发,既然要加密,那是选择md5之类的不可逆加密,还是选择AES256之类的可逆加密呢?由于在数据访问层中连接数据库进行数据交互必须是有效的明文用户和其密码,所以我们选择AES256之类的可逆加密,加密解密算法可以进一步自定义,这里就不讲解如何实现,相信online search下就很多相关文章了

好了,话不多说,代码实践见真理:

例如加密前为:eip_hr_user123,加密后为:3OHOG6W9NgpJTriw4x6JDg==dataconfiguration.config配置文件内容: 1 <configuration> 2 <configSections> 3 <section name="dataConfiguration" type="Microsoft.PRactices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 4 </configSections> 5 <dataConfiguration defaultDatabase="ORADBConnection" /> 6 <connectionStrings> 7 <add name="ORADBConnection" connectionString="Persist Security Info=True;User ID=eip_hr_user;PassWord=3OHOG6W9NgpJTriw4x6JDg==;Data Source=prd" 8 providerName="System.Data.OracleClient" /> 9 </connectionStrings>10 </configuration>

.NET中使用正则表达式匹配并替换字符串,其实在javaScript中也可以用这样的正则表达式,只是写法大同小异而已:

1 internal Database oraDB 2 { 3 get 4 { 5 if (_oradb != null) return _oradb; 6 FileConfigurationSource dataSource = new FileConfigurationSource("dataconfiguration.config"); 7 ConnectionStringsSection CSSection = (ConnectionStringsSection)dataSource.GetSection("connectionStrings"); 8 ConnectionStringSettings csSettings = csSection.ConnectionStrings["ORADBConnection"]; 9 if (csSettings != null)10 {11 string connectionStr = csSettings.ConnectionString;12 //author: Kenmu13 //created time: 2012-09-2414 //function: 针对密码进行加密的情况,必须解密 begin15 string pwd;16 Regex r = new Regex("Password=(?<Pwd>[^;]+)", RegexOptions.IgnoreCase);//?<Pwd>为标示符,不参与匹配的;+?表示非贪婪匹配17 Match m = r.Match(connectionStr);18 if (m.Success)19 {20 pwd = m.Groups["Pwd"].Value; //获取到密文21 try22 {23 connectionStr = connectionStr.Replace(string.Format("={0}", pwd), string.Format("={0}", Cryptogram.DecryptPassword(pwd))); //对密文进行解密操作,Cryptogram.DecryptPassword为自定义的可逆解密方法24 }25 catch26 {27 }28 }29 //function: 针对密码进行加密的情况,必须解密 end30 _oradb = new OracleDatabase(connectionStr);31 }32 return _oradb;33 }34 }

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航