在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → C# pki编程 实例源码(含服务端和客户端)

C# pki编程 实例源码(含服务端和客户端)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.29M
  • 下载次数:32
  • 浏览次数:460
  • 发布时间:2017-12-29
  • 实例类别:C#语言基础
  • 发 布 人:jkkkkjn
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 编程

实例介绍

【实例简介】pki信息加密
【实例截图】

【核心代码】


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.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Security;
using System.Security.Cryptography;
namespace PKI2
{
    public partial class Form1 : Form
    {
        //用户定义
        private bool isconnecting = false;
        private bool isconnected = false;
        private bool isclient = false;
        private const string infDisconn = "#DISCONNECT#";
        //接受信息线程
        private Thread th;
        //监听连接信号线程
        private Thread wait;
        private setPortForm portform;
        private madecer Makecert;
        private EnDES endes;
        private DeDES dedes;
        static public TcpListener tcp1;
        static public int port;
        //客户端
        private TcpClient tcpc;
        //服务器端
        private TcpClient tcps;
        //客户端
        private NetworkStream nsc;
        //服务器端
        OpenFileDialog of;
        private NetworkStream nss;
        private NetworkStream nswc;
         private NetworkStream nsws;
         private string _filePathName = string.Empty;  //文件名
        private string _destination = string.Empty;     //目标文件名
        static public string Deskeymi;
       static  public string Deskeyming;
        public Form1()
        {
            InitializeComponent();
        }

        private void button_connect_Click(object sender, EventArgs e)
        {
            if (this.youip.Text.Length == 0 || this.textBox2.Text.Length == 1)
            {
                string str = "请输入正确的IP地址和端口号";
                string cmd = "错误";
                MessageBox.Show(str, cmd);
                return;
            }
            tcpc = new TcpClient();
            string ip = this.youip.Text;
            int pnum = System.Convert.ToInt32(this.textBox2.Text, 10);
            try
            {
                tcpc.Connect(IPAddress.Parse(ip), pnum);
            }
            catch (ArgumentOutOfRangeException)
            {
                string str = "请输入有效的端口号";
                string cmd = "错误";
                MessageBox.Show(str, cmd);
                return;
            }
            catch (SocketException)
            {
                string str = "找不到对方,请重新确认对方的网络参数";
                string cmd = "错误";
                MessageBox.Show(str, cmd);
                return;
            }
            //获取网络流
            nsc = tcpc.GetStream();
            //保存到读取数据的数组
            byte[] read = new byte[2];
            //读取字节数
            int bytes = nsc.Read(read, 0, read.Length);
            //根据读到的字节数来判断对方作出何种回应,1表示允许连接,2表示拒绝
            if (bytes == 1)
            {
                string str = "已经建立连接!";
                string cmd = "完成";
                MessageBox.Show(str, cmd);
                isconnecting = true;
                isconnected = true;
                isclient = true;
                //创建接受信息线程
                th = new Thread(new ThreadStart(acceptmsg));
                th.Start();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
         Control.CheckForIllegalCrossThreadCalls = false;
         portform=new setPortForm();
		 portform.ShowDialog();
		 this.Text="c/s通信";
		 //启动tcplistner
		 tcp1.Start();
		 //启动等待连接线程
		 wait=new Thread(new ThreadStart(waitconn));
		 wait.Start();
        }
        private void waitconn()
        {
            //开始监听本地连接端口
            tcps = tcp1.AcceptTcpClient();
            nss = tcps.GetStream();
            //弹出连接对话筐
            string str = "用户请求连接,接受?";
            string cmd = "连接请求";
           /// this.Text = "P2P聊天(会话进行中)";
            DialogResult diares = MessageBox.Show(str, cmd, MessageBoxButtons.YesNo);
            //处理回应2个中间变量
            string strresp;
            byte[] byteresp;
            if (diares == DialogResult.Yes)
            {
                strresp = "#";
                byteresp = System.Text.Encoding.ASCII.GetBytes(strresp.ToCharArray());
                //将数据写入流
                nss.Write(byteresp, 0, byteresp.Length);
                //改变控制变量
                isconnecting = true;
                isconnected = true;
                isclient = false;
                //启动接受信息线程
                th = new Thread(new ThreadStart(acceptmsg));
                th.Start();

            }
            else if (diares == DialogResult.No)
            {
                strresp = "##";
                byteresp = System.Text.Encoding.ASCII.GetBytes(strresp.ToCharArray());
                nss.Write(byteresp, 0, byteresp.Length);
                nss.Close();
                tcps.Close();
                disconnect();
            }
        }
        private void disconnect()
        {
           
            isconnecting = false;
            //启动等待连接线程
            wait = new Thread(new ThreadStart(waitconn));
            wait.Start();
        }
        private void disconnect(TcpClient tcpc, NetworkStream ns)
        {
            byte[] write = new byte[64];
            write = System.Text.Encoding.ASCII.GetBytes(infDisconn.ToCharArray());
            ns.Write(write, 0, write.Length);
            ns.Close();
            tcpc.Close();
            disconnect();
        }
        //重载函数
        protected override void OnClosed(EventArgs e)
        {
            if (isconnecting)
            {
                if (isclient)
                {
                    disconnect(tcpc, nsc);
                }
                else
                {
                    disconnect(tcps, nss);
                }
            }
            tcp1.Stop();
            wait.Abort();
        }
        private void acceptmsg()
        {
            while (isconnecting)
            {
                if (isclient)
                {
                    acceptmsg(tcpc, nsc);
                }
                else
                {
                    acceptmsg(tcps, nss);
                }
            }
        }
        private void acceptmsg(TcpClient tcpc, NetworkStream ns)
        {
            byte[] read = new byte[1024];
            byte[]fl=new byte[1];
            ns = tcpc.GetStream();
            ns.Read(fl, 0, fl.Length);
            string flag = System.Text.Encoding.ASCII.GetString(fl.ToArray());
            if (string.Compare(flag, "%") != 0)
            {    string strout=flag;
                ns.Read(read, 0, read.Length);
                 strout = System.Text.Encoding.ASCII.GetString(read.ToArray());
                if (string.Compare(strout, infDisconn) == 0)
                {
                    string str = "用户已经断开了连接";
                    string cmd = "连接已断开";
                    MessageBox.Show(str, cmd);
                    this.richTextBox1.AppendText(str   "\n");
                    this.Text = "c/s通信";
                    ns.Close();
                    tcpc.Close();
                    disconnect();
                }
                else
                {
                    this.Text = "c/s通信";
                    this.richTextBox1.AppendText(strout);
                    this.richTextBox1.AppendText("\n");
                }
            }
            else
            {
                string path = this.textBox3.Text.Trim();
                string strout;
                ns.Read(read, 0, read.Length);
                strout= System.Text.Encoding.ASCII.GetString(read.ToArray());
                File.WriteAllText(path, strout);
            }
        }

        private void button_sendmesg_Click(object sender, EventArgs e)
        {
            if (isclient)
            {
                sendmsg(nsc);
            }
            else
            {
                sendmsg(nss);
            }
        }
        private void sendmsg(NetworkStream ns)
        {
            string msg =this.richTextBox2.Text;
            this.richTextBox2.Text = null;
            byte[] write = new byte[1024];
            write = System.Text.Encoding.ASCII.GetBytes(msg);
            ns.Write(write, 0, write.Length);
           this.richTextBox2.Focus();
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.richTextBox1.Clear();
            this.richTextBox2.Clear();
        }
        //文件发送
        private void button2_Click(object sender, EventArgs e)
        {
            //string path = this.textBox_wen.Text.Trim();
            FileStream fs = new FileStream(of.FileName, FileMode.Open);
            nswc=tcpc.GetStream();
            int sendcount=0;
            string flag = "%";
            long leni;
            string lens;
            byte[] countbuffer = new byte[1];
            byte[] len= new byte[1];
            byte[] clientbuffer=new byte[1024];
            countbuffer = System.Text.Encoding.ASCII.GetBytes(flag.ToCharArray());
            leni = fs.Length;
            lens = leni.ToString();
            //len= System.Text.Encoding.ASCII.GetBytes(lens.ToCharArray());
            this.nswc.Write(countbuffer, 0, 1);
            //this.nswc.Write(len,0, 1,);
            while(sendcount<fs.Length&&nswc.CanWrite)
            {
                int count=fs.Read(clientbuffer,0,clientbuffer.Length);
                this.nswc.Write(clientbuffer,0,count);
                sendcount= count;
            }
           nswc.Close();
            fs.Close();
        }
        //文件加密
        private void button6_Click(object sender, EventArgs e)
        {
        try
            {
                Encryptor encryptor = new Encryptor();
                encryptor.Key = GetPassword();
                encryptor.EncryptFile(_filePathName, _destination);
                MessageBox.Show("Succeed !");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "加密");
            }
        }
        //获取密码
        private string GetPassword()
        {
            string psword = textBoxDkey.Text;
            if (8 > psword.Length)
            {
                return psword.PadRight(8, 's');
            }
            else if (8 < psword.Length)
            {
                return psword.Substring(0, 8);
            }
            return psword;
        }
        //文件选择
        private void button7_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "file (*.*)|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
                _filePathName = dlg.FileName;
               textBox_wen.Text = _filePathName;
        }
        private void button6_Click_1(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "file (*.*)|*.*";
            if (dlg.ShowDialog() == DialogResult.OK)
                _destination = dlg.FileName; ;
            textBox_de.Text = _destination;
        }
        #region 目标文件

        //设置目标文件文本框
        private void SetDestination()
        {     
               
        }
        #endregion
        private void button_jie_Click(object sender, EventArgs e)
        {
            try
            {
                Encryptor descryptor = new Encryptor();
                descryptor.Key = GetPassword();
                descryptor.DecryptFile(_filePathName, _destination);
                MessageBox.Show("Succeed !");
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "解密");
            }
        }
        class Encryptor
        {
            //字段
            private string iv = string.Empty;
            private string key = string.Empty;

            #region 属性
            /// <summary>
            /// DES加密偏移量,必须是>=8位长的字符串
            /// </summary>
            public string IV
            {
                get { return iv; }
                set { iv = value; }
            }

            /// <summary>
            /// DES加密的私钥,必须是8位长的字符串
            /// </summary>
            public string Key
            {
                get { return key; }
                set { key = value; }
            }
            #endregion

            // string -> byte[]
            private byte[] GetBytes(string str)
            {
                return Encoding.ASCII.GetBytes(str);
            }

            // 生成加解密工具 ( true加密, false解密 )
            private ICryptoTransform CreateTransformer(bool encrypt_Decrypt)
            {
                try
                {
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    des.Key = GetBytes(key); //key必须是8byte 64位
                    if (string.Empty == iv)
                        iv = key;
                    des.IV = GetBytes(iv);

                    if (encrypt_Decrypt)
                        return des.CreateEncryptor();
                    else
                        return des.CreateDecryptor();
                }
                catch (Exception exp)
                {
                    MessageBox.Show(exp.Message);
                    return null;
                }
            }

            // 对字符串进行DES加密
            /// <summary>
            /// 对字符串进行DES加密
            /// </summary>
            /// <param name="sourceString">待加密的字符串</param>
            /// <returns>加密后的BASE64编码的字符串</returns>
            public string Encrypt(string sourceString)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] inData = GetBytes(sourceString);
                    try
                    {
                        ICryptoTransform transformer = CreateTransformer(true);
                        if (null == transformer) return null;

                        using (CryptoStream cs = new CryptoStream(ms, transformer, CryptoStreamMode.Write))
                        {
                            cs.Write(inData, 0, inData.Length);
                            cs.FlushFinalBlock();
                        }

                        return Convert.ToBase64String(ms.ToArray());
                    }
                    catch
                    {
                        throw;
                    }
                }
            }

            // 对DES加密后的字符串进行解密
            /// <summary>
            /// 对DES加密后的字符串进行解密
            /// </summary>
            /// <param name="encryptedString">待解密的字符串</param>
            /// <returns>解密后的字符串</returns>
            public string Decrypt(string encryptedString)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    byte[] inData = Convert.FromBase64String(encryptedString);
                    try
                    {
                        ICryptoTransform transformer = CreateTransformer(false);
                        if (null == transformer) return null;

                        using (CryptoStream cs = new CryptoStream(ms, transformer, CryptoStreamMode.Write))
                        {
                            cs.Write(inData, 0, inData.Length);
                            cs.FlushFinalBlock();
                        }

                        return UnicodeEncoding.Unicode.GetString(ms.ToArray());
                    }
                    catch
                    {
                        throw;
                    }
                }
            }

            //对文件进行加解密
            private void TransformFile(string sourceFile, string destFile, bool encrypt_Decrypt)
            {
                if (!File.Exists(sourceFile))
                    throw new FileNotFoundException("指定的文件路径不存在!", sourceFile);
                byte[] btFile = File.ReadAllBytes(sourceFile);

                using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write))
                {
                    try
                    {
                        ICryptoTransform transformer = CreateTransformer(encrypt_Decrypt);
                        if (null == transformer) return;

                        using (CryptoStream cs = new CryptoStream(fs, transformer, CryptoStreamMode.Write))
                        {
                            cs.Write(btFile, 0, btFile.Length);
                            cs.FlushFinalBlock();
                        }
                    }
                    catch (CryptographicException)
                    {
                        throw new Exception("密码不正确");
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        fs.Close();
                    }
                }
            }

            /// <summary>
            /// 对文件内容进行DES加密
            /// </summary>
            /// <param name="sourceFile">待加密的文件绝对路径</param>
            /// <param name="destFile">加密后的文件保存的绝对路径</param>
            public void EncryptFile(string sourceFile, string destFile)
            {
                TransformFile(sourceFile, destFile, true);
            }

            /// <summary>
            /// 对文件内容进行DES加密,加密后覆盖掉原来的文件
            /// </summary>
            /// <param name="sourceFile">待加密的文件的绝对路径</param>
            public void EncryptFile(string sourceFile)
            {
                EncryptFile(sourceFile, sourceFile);
            }

            /// <summary>
            /// 对文件内容进行DES解密
            /// </summary>
            /// <param name="sourceFile">待解密的文件绝对路径</param>
            /// <param name="destFile">解密后的文件保存的绝对路径</param>
            public void DecryptFile(string sourceFile, string destFile)
            {
                TransformFile(sourceFile, destFile, false);
            }

            /// <summary>
            /// 对文件内容进行DES解密,加密后覆盖掉原来的文件
            /// </summary>
            /// <param name="sourceFile">待解密的文件的绝对路径</param>
            public void DecryptFile(string sourceFile)
            {
                DecryptFile(sourceFile, sourceFile);
            }

        }

        private void button5_Click(object sender, EventArgs e)
        {
            Makecert = new madecer();
            Makecert.ShowDialog();
        }

        private void button4_Click(object sender, EventArgs e)
        {
           endes= new EnDES();
            endes.ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            dedes = new DeDES();
            dedes.ShowDialog();
        }

        private void button8_Click(object sender, EventArgs e)
        {
            richTextBox2.Text = Deskeymi;
        }

        private void button9_Click(object sender, EventArgs e)
        {
            of = new OpenFileDialog();
            if (of.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = of.FileName;
            }
        }

        private void button_disconnect_Click(object sender, EventArgs e)
        {
            if (isclient)
            {
                disconnect(tcpc, nsc);
            }
            else
            {
                disconnect(tcps, nss);
            }
        }

        private void 接受信息_Click(object sender, EventArgs e)
        {

        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void groupBox3_Enter(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void youip_TextChanged(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        

    }
}


标签: 编程

实例下载地址

C# pki编程 实例源码(含服务端和客户端)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警