加密解密 保存设置

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   

 


    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值