mysql连接字符串加密配置_app.config数据库连接字符串的加密(转)

本文介绍了如何对app.config中的数据库连接字符串进行加密,以增强应用程序的安全性。通过将连接参数存储到加密的XML文件中,然后在程序启动时解密写入config文件,确保敏感信息不以明文形式存在。同时,对Settings.cs文件中的代码进行了改造,以在运行时正确读取和解密加密的连接字符串。
摘要由CSDN通过智能技术生成

一直都想对app.config下的数据库连接字符串进行加密,因为程序直接调用数据集的时候必需要调用app.config(程序编译后会自动更名为程序文件名.config),如果数据库连接字符串以明文方式放置在那里,将是意见危险的事情。所以,必须进行加密。

1.我将数据库连接的各个参数(如数据库名,用户,密码,服务器地址)等存放到一个xml文件中,之后对其进行加密,并存放于一个服务器共享目录里面。

2.当程序启动时,采用一个单独的程序来获取加密的数据库连接信息参数,读取服务器共享目录里面的加密xml文档,然后形成字符串“Data Source=(local);Initial Catalog=TclyworkDb;Persist Security Info=True;User ID=sa;Password=sa”

并通过这个单独的程序写入到主程序需要调用的config文件中。

//获取数据库连接配置

strConn = "Data Source=" + ((DataRowView)tabDBServerBindingSource.Current).Row["ServerName"].ToString();

strConn= strConn + ";Initial Catalog=" + ((DataRowView)tabDBServerBindingSource.Current).Row["DBName"].ToString();

strConn= strConn + ";Persist Security Info=True;User ID=" + ((DataRowView)tabDBServerBindingSource.Current).Row["LoginName"].ToString();

strConn= strConn + ";Password=" + ((DataRowView)tabDBServerBindingSource.Current).Row["LoginPwd"].ToString();

strConn=objEncrypt.DesEncrypt(strConn, "123456789");

SaveConfig(strConn);//保存到数据库连接配置文件中.

private void SaveConfig(stringConnenctionString)

{try{

XmlDocument doc= newXmlDocument();//获得配置文件的全路径

string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Tclywork.Frame.Module.DbSet.dll.config";

doc.Load(strFileName);//找出名称为“add”的所有元素

XmlNodeList nodes = doc.GetElementsByTagName("add");for (int i = 0; i < nodes.Count; i++)

{//获得将当前元素的key属性

XmlAttribute att = nodes[i].Attributes[1];//根据元素的第一个属性来判断当前的元素是不是目标元素

if (att.Name == "connectionString")

{//对目标元素中的第二个属性赋值

att = nodes[i].Attributes[1];

att.Value=ConnenctionString;break;

}

}//保存上面的修改

doc.Save(strFileName);

}catch(Exception error)

{//MessageBox.Show(error.Message);//lMessage.Text = this.Text + "-lueAccount_EditValueChanged-" + error.Message;

mMgs.ShowForm(Tclywork.Class.Command.Properties.Resources.msgError, this.Text + "-SaveConfig-" +error.Message);

}

}

这样,我就得到一个数据库字符串经过加密的config文件

Tclywork.Frame.Module.DbSet.dll.config 文件内容如下:

connectionString部分就加密了。

完成以上工作后就需要让主程序能读取到这样的数据库连接字符串信息,并通过解密完成,正常的工作。

首先,我们打开Settings.Designer.cs,发现如下代码:

[global::System.Configuration.ApplicationScopedSettingAttribute()]

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]

[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(local);Initial Catalog=TclyworkDb;Persist Security Info=True;U" +

"ser ID=sa;Password=sa")]public stringTclyworkDbConnectionString {get{return ((string)(this["TclyworkDbConnectionString"]));

}

}

将这部分代码剪切到Settings.cs文件中(如果没有看到这个文件,请双击Settings.settings文件,然后点击上面的“查看代码”)。如果以后出现已经存在的话,就直接删除Settings.cs里面的这段代码。

到了这个时候我们就需要改造一下这段代码,参考如下:

[global::System.Configuration.ApplicationScopedSettingAttribute()]

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]//[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(local);Initial Catalog=TclyworkDb;Persist Security Info=True;User ID" +//"=tclyworkDb;Password=tclyworkDb")]

[global::System.Configuration.DefaultSettingValueAttribute("Data Source=(local);Initial Catalog=TclyworkDb;Persist Security Info=True;User ID=tclyworkDb;Password=tclyworkDb")]//wBnJlU9N1bfAAvLAeA7TM7kZGD/DJfIFfsx7sh+6Lq9g+0R7f5u5XkTqKkjraNy6pkmD18vuPdMOE7PYBNsd90NZYNPA5k9sSJCGuvhrmXjyPh7m+2ivHyXZdoHOP0dKobvqrpt9c/Si+aPM3WVs57OSpQTVqzoW

public stringTclyworkDbConnectionString

{get{try{string strTemp = "";

XmlDocument doc= newXmlDocument();//获得配置文件的全路径

string strFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Tclywork.Frame.Module.DbSet.dll.config";if(File.Exists(strFileName))

{

doc.Load(strFileName);//找出名称为“add”的所有元素

XmlNodeList nodes = doc.GetElementsByTagName("add");for (int i = 0; i < nodes.Count; i++)

{//获得将当前元素的key属性

XmlAttribute att = nodes[i].Attributes[1];//根据元素的第一个属性来判断当前的元素是不是目标元素

if (att.Name == "connectionString")

{//对目标元素中的第二个属性赋值

att = nodes[i].Attributes[1];

strTemp=att.Value;break;

}

}return objEncrypt.DesDecrypt(strTemp, "123456789");

}else{return "";

}

}catch(Exception error)

{return "";

}

}set{string strTemp = objEncrypt.DesEncrypt(value, "123456789");

TclyworkDbConnectionString=strTemp ;

}

}

好了,到此修改完毕,你所发布的程序里,虽说有config配置文件,但关键的数据库连接字符串却是已经加密的了。

大功告成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值