app.config数据库连接字符串的加密

C# 对App.config、Web.configappSettings节点数据进行加密 使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令;并且使用aspnet_regiis加密的配置节点在读取时不需要手动解密,.Net会自行解密并返回解密后的数据。这个命令将加密config文件中的connectionStrings节点,C:\MyAppFolder指你程序部署的绝对路径。这个命令将会加密config文件中的appSettings节点,C:\MyAppFolder指你程序部署的绝对路径。这个命令将解密config中的已经加密的connectionStrings节点。 阅读详情

一直都想对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(string ConnenctionString)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                //获得配置文件的全路径
                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 文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="Tclywork.Frame.Module.DbSet.Properties.Settings.TclyworkDbConnectionString" connectionString="wBnJlU9N1bcuQCUFsJJ7GvuvllDHlQGOfEXfFIopLC7BFAIrRd767POIH00wb59pfKsbBqaQZgSMwaxGkowLQNNYSllCKzNN+EgH0Xry5i8B63oRZSUX1Hc/xq2va7yN1pKoeBeVv8IpM8ARjzf4QXdhB1Ql6be9" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

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 string TclyworkDbConnectionString {
            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 string TclyworkDbConnectionString
        {
            get
            {
                try
                {
                    string strTemp = "";
                    XmlDocument doc = new XmlDocument();
                    //获得配置文件的全路径
                    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配置文件,但关键的数据库连接字符串却是已经加密的了。

大功告成。

以上是我自己琢磨一点点试出来的,如有指教,请多多联系。

不改代码,实现web.configapp.config连接字符串加密解密 例如,以下命令创建一个名为 NetFrameworkConfigurationKey_components1 的 RSA 密钥容器,该容器是机器级密钥容器并且可以导出。在IIS下创建walkthrough.aspx,内容如下,运行后可见解密内容。step3:更新web.config(由app.config改名而来)文件。step5:改回app.config(由web.config改回)文件。web.config部分截图如下,生成好的加密字符串。好处:不用修改代码,微软自带功能,自动解密。 阅读详情

相关推荐

App.config数据库连接加密(C#、VB)

环境为VS2008 C#或VB ,SQL ,本人已测试通过,有人会说直接把连接串写程序里不就行了,可以不用那个连接串的,确实是这样的,不过只要你的项目中DataSet里有TableAdapter,那么App.config中的连接串就是必不可少的,所以就要加密。。。。不过话说回来用.NET做数据库的项目不用这功能有点。。。。。。 此种方法虽不是完美,但作为一般应用已经足够。 另外在CSDN上找了半天,也下了一些例子不过不是把网上文章抄一下就是基本不能用!大部分都是骗分的,这个例子我是在国外网站上找的,自己小改了一下测试通过!

记录Springboot2.5.6整合shardingjdbc4.1.1数据源健康检查异常

记录Springboot2.5.6整合shardingjdbc4.1.1数据源健康检查报错 百度上基本上都是实现这个类DataSourceHealthContributorAutoConfiguration,此方法不适用于新版shardingjdbc 报错日志 org.apache.shardingsphere.shardingjdbc.jdbc.unsupported.AbstractUnsupportedOperationConnection.isValid 原因 新版Spring中,健康健康检查用到

Emmien的博客 2386

C#加密app.config连接字符串的方法

主要介绍了C#加密app.config连接字符串的方法,涉及C#配置文件加密的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

分库分表用这个就够了

2018年写过一篇分库分表的文章《SpringBoot使用sharding-jdbc分库分表sharding-jdbc的版本(1.4.2)过低,现在github上的最新版本都是5.3.2了,很多用法和API都过时了。分库分表配置采用Java硬编码的方式不够灵活持久层使用的是spring-boot-starter-data-jpa,而不是主流的mybatis+mybatis-plus+druid-spring-boot-stater没有支持自定义主键生成策略。

2301_78287784的博客 620

C# App.config和Web.config加密

使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令。

u012949335的专栏 1913

动态设置并加密App.Config数据库连接字符串

App.config中的数据库连接字符串,是在Settings.settings同步过来的。后者在设计时支持数据集DataSet的设计,但运行时不能更改,可以更改App.config连接字符串,但无法加密、解密。造成的结果是数据库连接字符串,要么固定不变,要么以明文显示,极不安全……   App.config中的数据库连接字符串,是在Settings.settings同步过来的。后者

shaily读书学习 2072

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

一直都想对app.config下的数据库连接字符串进行加密,因为程序直接调用数据集的时候必需要调用app.config(程序编译后会自动更名为程序文件名.config),如果数据库连接字符串以明文方式放置在那里,将是意见危险的事情。所以,必须进行加密。1.我将数据库连接的各个参数(如数据库名,用户,密码,服务器地址)等存放到一个xml文件中,之后对其进行加密,并存放于一个服务器共享目录里面。2....

weixin_33219863的博客 412

运行时动态设置并加密App.Config中的数据库连接字符串

  App.config中的数据库连接字符串,是在Settings.settings同步过来的。后者在设计时支持数据集DataSet的设计,但运行时不能更改,可以更改App.config连接字符串,但无法加密、解密。造成的结果是数据库连接字符串,要么固定不变,要么以明文显示,极不安全。多次尝试后,成功的解决这些问题。我的经验:  1. Settings.settings中的设置和App.conf

朩冰雲的专栏 4498

app.config数据库连接字符串加密(转)

一直都想对app.config下的数据库连接字符串进行加密,因为程序直接调用数据集的时候必需要调用app.config(程序编译后会自动更名为程序文件名.config),如果数据库连接字符串以明文方式放置在那里,将是意见危险的事情。所以,必须进行加密。 1.我将数据库连接的各个参数(如数据库名,用户,密码,服务器地址)等存放到一个xml文件中,之后对其进行加密,并存放于一个服务器共享目录里面。2...

weixin_30674525的博客 204

vs2015,c#程序app.config文件加密数据库连接字符串加密后不明文显示,但解密也很简单)

注意:这种加密方式只能在本机上正常使用,放在其他电脑上会因无法解密而程序运行失败,有点鸡肋。不过这个本来是给web端开发用的,服务器上应该有解决办法。后来我又改用了自己写的加密解密。des,md5等都很容易使用 首先说一句:加密防君子不防小人,其实加密方法很多,什么加壳,混淆,等等。。。其实都是可以破解的。增加一些破解难度就行了,想要真正不被破解好像并不容易做到。 加密步骤: 步骤1:找到a...

qq_42063091的博客 5495

对WinForm的App.config文件进行加密

最近在做一个WinForm的项目,由于采用的是在客户端直接连接数据库的方式,需要在客户端部署App.config,由于使用了Enterprise Library,需要对App.config文件里的connectionStrings片断进行加密处理,搜索MSDN,发现已经有了现成的工具ASP.NET IIS 注册工具 (Aspnet_regiis.exe),可是它只能针对ASP.NET的Web.

Sbangm的专栏 995

C#加密app.config连接字符串的代码

这篇文章主要介绍了C#加密app.config连接字符串的方法,涉及C#配置文件加密的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下: 本文实例讲述了C#加密app.config连接字符串的方法。分享给大家供大家参考。具体如下: 连接字符串中包含数据库的访问信息,帐号和密码,因此一般不以明文显示,本代码用来加密连接字符串。 public static class Encrypt...

weixin_30546933的博客 493

App.config创建连接字符串

摘要:本文介绍了在App.config中配置SQL Server连接字符串的两种方式,分别存储在connectionStrings和appSettings节点中。第一种方式使用标准属性(server,database,uid,pwd),第二种采用SQL客户端属性(Data Source,Initial Catalog等)。代码示例展示了如何通过ConfigurationManager读取这两种配置,并输出连接字符串。同时详细解析了连接字符串中各参数含义:server表示服务器地址,database指定数据库

weixin_61819056的博客 324
下一篇: MSSQL数据库C#操作类
lv111zy
博客等级 码龄14年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值