加密的东西比较少用,特意记下来下次需要用到直接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);
}
}
}
}