数据库配置文件加密

加密的东西比较少用,特意记下来下次需要用到直接copy就好了。
调试时appconfig.ini文件需要放在debug目录下。生成文件时需要将该文件连同源码一起打包。

测试窗口
数据库配置文件

加密解密类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.IO;

namespace Mrp
{
    class EncryPtion
    {

        private byte[] keyvi = System.Text.ASCIIEncoding.ASCII.GetBytes("DESENCcd");

            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="normalTxt"></param>
            /// <param name="EncryptKey"></param>
            /// <returns></returns>
            public string DesEncrypt(string normalTxt, string EncryptKey)
            {
                var bytes = Encoding.Default.GetBytes(normalTxt);
                var key = Encoding.UTF8.GetBytes(EncryptKey.PadLeft(8, '0').Substring(0, 8));
                using (MemoryStream ms = new MemoryStream())
                {
                    var encry = new DESCryptoServiceProvider();
                    CryptoStream cs = new CryptoStream(ms, encry.CreateEncryptor(key, keyvi), CryptoStreamMode.Write);
                    cs.Write(bytes, 0, bytes.Length);
                    cs.FlushFinalBlock();
                    return Convert.ToBase64String(ms.ToArray());
                }
            }

            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="securityTxt"></param>
            /// <param name="EncryptKey"></param>
            /// <returns></returns>
            public string DesDecrypt(string securityTxt, string EncryptKey)
            {
                try
                {
                    var bytes = Convert.FromBase64String(securityTxt);
                    var key = Encoding.UTF8.GetBytes(EncryptKey.PadLeft(8, '0').Substring(0, 8));
                    using (MemoryStream ms = new MemoryStream())
                    {
                        var descrypt = new DESCryptoServiceProvider();
                        CryptoStream cs = new CryptoStream(ms, descrypt.CreateDecryptor(key, keyvi), CryptoStreamMode.Write);
                        cs.Write(bytes, 0, bytes.Length);
                        cs.FlushFinalBlock();
                        return Encoding.UTF8.GetString(ms.ToArray());
                    }

                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }
        }

    }

操作INI配置文件类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.InteropServices;

namespace Mrp
{
    class OperConfigFile
    {
        [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)]
        public static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString", CharSet = CharSet.Ansi)]
        public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
   
       public string fileName;
        public OperConfigFile(string filename)
        {
            this.fileName = filename;
        }

        /// <summary>
        /// 保存INI文件
        /// </summary>
        /// <param name="section"></param>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void saveFile(string section, string key, string value)
        {
           WritePrivateProfileString(section,key,value,fileName);
        }

        /// <summary>
        /// 读取INi配置文件
        /// </summary>
        /// <param name="section"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public string readFile(string section,string key)
        {
            StringBuilder tmp = new StringBuilder(255);
            int i=  GetPrivateProfileString(section,key,"没有数据",tmp,255,fileName);
            return tmp.ToString();
        }

    }
}

面板代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.IO;
using System.Data.SqlClient;


namespace Mrp
{
    public partial class SqlDatasting : Form
    {
        public SqlDatasting()
        {
            InitializeComponent();
        }

        private void SqlDatasting_Load(object sender, EventArgs e)
        {
            readIniFile();
        }
 
        /// <summary>
        /// 读取INI配置文件信息
        /// </summary>
        public void readIniFile()
        {
            string filePath = Environment.CurrentDirectory + "\\appconfig.ini"; ;
            string fileName = "appconfig";
            OperConfigFile iniOper = new OperConfigFile(filePath);
            string pwd = iniOper.readFile(fileName, "pwd");
            string times = iniOper.readFile(fileName, "times");
            txthost.Text = iniOper.readFile(fileName,"server");
            txtuser.Text = iniOper.readFile(fileName,"uid");
           string  decpwd = Decrypt(pwd,times);
            txtpwd.Text = decpwd;            
        }

        /// <summary>
        /// 保存配置文件
        /// </summary>
        /// <param name="strKey字段名 (server)"></param>
        /// <param name="values 字段值(127.0.0.1)"></param>
        public void saveFile(string strKey,string values)
        {
            string filePath = Environment.CurrentDirectory + "\\appconfig.ini"; ;
            string fileName = "appconfig";
            string times = Convert.ToString(DateTime.Today);   
            OperConfigFile iniOper = new OperConfigFile(filePath);
            iniOper.saveFile(fileName,strKey,values);
        }
   

        /// <summary>
        /// 测试配置信息,测试链接数据库情况
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="uid"></param>
        /// <param name="pwd"></param>
        /// <param name="timrOut"></param>
        /// <returns></returns>
        public SqlConnection testDataConnection(string ip, string uid, string pwd, int timrOut)
        {

            int timeOut = Convert.ToInt32(txtcomout.Text.Trim());
            SqlConnection con = new SqlConnection("server=" + ip + ";database=mrpsql;uid=" + uid + ";pwd=" + pwd + ";Connection timeout=" + timeOut + "");
            return con;
        }

      /// <summary>
      /// 解密
      /// </summary>
      /// <param name="str"></param>
      /// <param name="times"></param>
      /// <returns></returns>
        private string Decrypt(string str,string times)
        {
            times = times.Substring(0, 10);
            string DESstr = "DeStr";
            DESstr+= times;
            EncryPtion enc = new EncryPtion();
            string pwd = enc.DesDecrypt(str,DESstr);
            return pwd;
        }

       /// <summary>
       /// 加密
       /// </summary>
       /// <param name="str"></param>
       /// <param name="times"></param>
       /// <returns></returns>
        private string Encrypt(string str,string times)
        {
            times = times.Substring(0, 10);
            string DESstr = "DeStr";
            DESstr += times;
            EncryPtion enc = new Mrp.EncryPtion();
            string pwd = enc.DesEncrypt(str, DESstr);
            return pwd;
        }

        private void btn_save_Click(object sender, EventArgs e)
        {
            try
            {
              
                string server = txthost.Text.Trim();
                string uid = txtuser.Text.Trim();
                string pwdw = txtpwd.Text.Trim();
                string times = Convert.ToString(DateTime.Today);
                times = times.Substring(0, 10);
                string pwd= Encrypt(pwdw,times);
                string[] values = { server, uid, pwd,times };
                string[] strKey = { "server", "uid", "pwd","times" };
                for (int i = 0; i < values.Length; i++)
                {                   
                    saveFile(strKey[i], values[i]);
                    if (i == 2)
                    {
                        MessageBox.Show("配置成功保存", "提示");
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btn_test_Click(object sender, EventArgs e)
        {
            string server = txthost.Text.Trim();
            string uid = txtuser.Text.Trim();
            string pwd = txtpwd.Text.Trim();
            int outTime = Convert.ToInt32(txtcomout.Text.Trim());
            SqlConnection con=   testDataConnection(server,uid,pwd,outTime);
            try
            {
                con.Open();
                if (con.State==ConnectionState.Open)
                {
                    MessageBox.Show("数据库链接成功"," 提示");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值