using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography;
using System.Net;
using System.Xml;
using DevExpress.XtraEditors;
namespace DutySystem
{
public partial class ClientProxy : DevExpress.XtraEditors.XtraForm
{
#region 窗体事件
public ClientProxy()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ServerProxy(true);
//CHK_Local_Ver();
this.Close();
}
private void ClientProxy_Load(object sender, EventArgs e)
{
ServerProxy(false);
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
Txt_ServerIP.Enabled = checkBox1.Checked;
Txt_ServerPort.Enabled = checkBox1.Checked;
Txt_ServerPWD.Enabled = checkBox1.Checked;
Txt_ServerUSE.Enabled = checkBox1.Checked;
}
#endregion
#region 全局变量
byte[] IVArray ={ 57, 160, 21, 190, 162, 87, 36, 239 };
//加密使用iv
byte[] keyArray = { 32, 248, 65, 42, 22, 36, 63, 225, 22, 165, 157, 225, 177, 91, 243, 41, 67, 25, 39, 63, 229, 148, 163, 232 };
//服务器更新列表暂存地址
string ServerPath = Application.StartupPath + "//server.xml";
//本地配置文件
string MachineConfig = Application.StartupPath + "//MachineConfig.xml";
//本地版本文件
string LocalPath = Application.StartupPath + "//UpdateConfig.xml";
#endregion
#region 代理设置 public bool ServerProxy(bool _IsSave)
/// <summary>
/// 代理设置
/// </summary>
/// <param name="_IsSave">是否保存 true:保存</param>
/// <returns></returns>
public bool ServerProxy(bool _IsSave)
{
try
{
string _XmlPath = MachineConfig;
if (File.Exists(_XmlPath))
{
System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
xd.Load(_XmlPath);
System.Xml.XmlNode xn = xd.ChildNodes[0];
foreach (System.Xml.XmlNode var in xn.ChildNodes)
{
if (var.Name.Trim().Equals("IsProxy"))
{
if (_IsSave)
{
var.InnerText = checkBox1.Checked.ToString().ToLower();
}
else
{
checkBox1.Checked = var.InnerText.Trim().Equals("") ? false : Convert.ToBoolean(var.InnerText.Trim());
Txt_ServerIP.Enabled = checkBox1.Checked;
Txt_ServerPort.Enabled = checkBox1.Checked;
Txt_ServerPWD.Enabled = checkBox1.Checked;
Txt_ServerUSE.Enabled = checkBox1.Checked;
}
}
if (var.Name.Trim().Equals("ServerIP"))
{
if (_IsSave)
{
var.InnerText = Txt_ServerIP.Text.Trim();
}
else
{
Txt_ServerIP.Text = var.InnerText.Trim();
}
}
if (var.Name.Trim().Equals("ServerPort"))
{
if (_IsSave)
{
var.InnerText = Txt_ServerPort.Text.Trim();
}
else
{
Txt_ServerPort.Text = var.InnerText.Trim();
}
}
if (var.Name.Trim().Equals("ServerUSE"))
{
if (_IsSave)
{
var.InnerText = Txt_ServerUSE.Text.Trim();
}
else
{
Txt_ServerUSE.Text = var.InnerText.Trim();
}
}
if (var.Name.Trim().Equals("ServerPWD"))
{
if (_IsSave)
{
var.InnerText = EncryptString(Txt_ServerPWD.Text.Trim(), keyArray, IVArray);
}
else
{
Txt_ServerPWD.Text = DecryptTextFromMemory(var.InnerText.Trim(), keyArray, IVArray);
}
}
}
if (_IsSave)
{
xd.Save(_XmlPath);
}
}
return true;
}
catch { return false; }
}
#endregion
#region 加密与解密 EncryptString(...) DecryptTextFromMemory(...)
/// <summary>
/// 加密
/// </summary>
/// <param name="plainTextArray">需要加密的明文</param>
/// <param name="Key">key</param>
/// <param name="IV">iv</param>
/// <returns></returns>
public static string EncryptString(string plainTextString, byte[] Key, byte[] IV)
{
try
{
// 使用utf-8编码(也可以使用其它的编码)
Encoding sEncoding = Encoding.GetEncoding("utf-8");
// 把字符串明文转换成utf-8编码的字节流
byte[] plainTextArray = sEncoding.GetBytes(plainTextString);
// 建立一个MemoryStream,这里面存放加密后的数据流
MemoryStream mStream = new MemoryStream();
// 使用MemoryStream 和key、IV新建一个CryptoStream 对象
CryptoStream cStream = new CryptoStream(mStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
// 将加密后的字节流写入到MemoryStream
cStream.Write(plainTextArray, 0, plainTextArray.Length);
//把缓冲区中的最后状态更新到MemoryStream,并清除cStream的缓存区
cStream.FlushFinalBlock();
// 把解密后的数据流转成字节流
byte[] ret = mStream.ToArray();
// 关闭两个streams.
cStream.Close();
mStream.Close();
string str = "";
foreach (byte var in ret)
{
str += var + "#";
}
return str;
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
return "";
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="EncryptedDataArray">需要解密的密文字节流</param>
/// <param name="Key">key</param>
/// <param name="IV">iv</param>
/// <returns></returns>
public static string DecryptTextFromMemory(string EncryptedDataString, byte[] Key, byte[] IV)
{
try
{
//string 转换为 bytes
Encoding sEncoding = Encoding.GetEncoding("utf-8");
string[] str_Arry = EncryptedDataString.Split('#');
byte[] EncryptedDataArray = new byte[str_Arry.Length - 1];
for (int i = 0; i < str_Arry.Length - 1; i++)
{
EncryptedDataArray[i] = Convert.ToByte(int.Parse(str_Arry[i]));
}
// 建立一个MemoryStream,这里面存放加密后的数据流
MemoryStream msDecrypt = new MemoryStream(EncryptedDataArray);
// 使用MemoryStream 和key、IV新建一个CryptoStream 对象
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
// 根据密文byte[]的长度(可能比加密前的明文长),新建一个存放解密后明文的byte[]
byte[] DecryptDataArray = new byte[EncryptedDataArray.Length];
// 把解密后的数据读入到DecryptDataArray
csDecrypt.Read(DecryptDataArray, 0, DecryptDataArray.Length);
msDecrypt.Close();
csDecrypt.Close();
return sEncoding.GetString(DecryptDataArray);
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
return "";
}
}
#endregion
}
}