Csharp/C Sharp/Network/Crypto Connection

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Cryp Data Receiver

<source lang="csharp"> /* C# Network Programming by Richard Blum Publisher: Sybex ISBN: 0782141765

  • /

using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; using System.Security; using System.Security.Cryptography; using System.Text; public class CryptoDataRcvr {

  private SerialEmployee RecvData(NetworkStream strm)
  {
     MemoryStream memstrm = new MemoryStream();
     byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
     CryptoStream csw = new CryptoStream(memstrm, tdes.CreateDecryptor(Key, IV),
                        CryptoStreamMode.Write);
     byte[] data = new byte[2048];
     int recv = strm.Read(data, 0, 4);
     int size = BitConverter.ToInt32(data, 0);
     int offset = 0;
     while(size > 0)
     {
        recv = strm.Read(data, 0, size);
        csw.Write(data, offset, recv);
        offset += recv;
        size -= recv;
     }
     csw.FlushFinalBlock();
     IFormatter formatter = new SoapFormatter();
     memstrm.Position = 0;
     SerialEmployee emp = (SerialEmployee)formatter.Deserialize(memstrm);
     memstrm.Close();
     return emp;
  }      
  public CryptoDataRcvr()
  {
     TcpListener server = new TcpListener(9050);
     server.Start();
     Console.WriteLine("Waiting for a client...");
     TcpClient client = server.AcceptTcpClient();
     NetworkStream strm = client.GetStream();
     SerialEmployee emp1 = RecvData(strm);
     Console.WriteLine("emp1.EmployeeID = {0}", emp1.EmployeeID);
     Console.WriteLine("emp1.LastName = {0}", emp1.LastName);
     Console.WriteLine("emp1.FirstName = {0}", emp1.FirstName);
     Console.WriteLine("emp1.YearsService = {0}", emp1.YearsService);
     Console.WriteLine("emp1.Salary = {0}\n", emp1.Salary);
     SerialEmployee emp2 = RecvData(strm);
     Console.WriteLine("emp2.EmployeeID = {0}", emp2.EmployeeID);
     Console.WriteLine("emp2.LastName = {0}", emp2.LastName);
     Console.WriteLine("emp2.FirstName = {0}", emp2.FirstName);
     Console.WriteLine("emp2.YearsService = {0}", emp2.YearsService);
     Console.WriteLine("emp2.Salary = {0}", emp2.Salary);
     strm.Close();
     server.Stop();
  }
  public static void Main()
  {
     CryptoDataRcvr cdr = new CryptoDataRcvr();
  }

} [Serializable] public class SerialEmployee {

  public int EmployeeID;
  public string LastName;
  public string FirstName;
  public int YearsService;
  public double Salary;
  public SerialEmployee()
  {
     EmployeeID = 0;
     LastName = null;
     FirstName = null;
     YearsService = 0;
     Salary = 0.0;
  }

}


      </source>


Cryp Data Sender

<source lang="csharp"> /* C# Network Programming by Richard Blum Publisher: Sybex ISBN: 0782141765

  • /

using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; using System.Security; using System.Security.Cryptography; using System.Text; public class CryptoDataSender {

  private void SendData(NetworkStream strm, SerialEmployee emp)
  {
     IFormatter formatter = new SoapFormatter();
     MemoryStream memstrm = new MemoryStream();
     byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
     CryptoStream csw = new CryptoStream(memstrm, tdes.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
     formatter.Serialize(csw, emp);
     csw.FlushFinalBlock();
     byte[] data = memstrm.GetBuffer();
     int memsize = (int)memstrm.Length;
     byte[] size = BitConverter.GetBytes(memsize);
     strm.Write(size, 0, 4);
     strm.Write(data, 0, (int)memsize);
     strm.Flush();
     csw.Close();
     memstrm.Close();
  }
  public CryptoDataSender()
  {
     SerialEmployee emp1 = new SerialEmployee();
     SerialEmployee emp2 = new SerialEmployee();
     emp1.EmployeeID = 1;
     emp1.LastName = "Blum";
     emp1.FirstName = "Katie Jane";
     emp1.YearsService = 12;
     emp1.Salary = 35000.50;
     emp2.EmployeeID = 2;
     emp2.LastName = "Blum";
     emp2.FirstName = "Jessica";
     emp2.YearsService = 9;
     emp2.Salary = 23700.30;
     TcpClient client = new TcpClient("127.0.0.1", 9050);
     NetworkStream strm = client.GetStream();
     SendData(strm, emp1);
     SendData(strm, emp2);
     strm.Close();
     client.Close();
  }
  public static void Main()
  {
     CryptoDataSender cds = new CryptoDataSender();
  }

}

[Serializable] public class SerialEmployee {

  public int EmployeeID;
  public string LastName;
  public string FirstName;
  public int YearsService;
  public double Salary;
  public SerialEmployee()
  {
     EmployeeID = 0;
     LastName = null;
     FirstName = null;
     YearsService = 0;
     Salary = 0.0;
  }

}


      </source>


CryptoStream demo

<source lang="csharp"> /* C# Network Programming by Richard Blum Publisher: Sybex ISBN: 0782141765

  • /

using System; using System.IO; using System.Security; using System.Security.Cryptography; using System.Text; public class CryptoTest {

  public static void Main()
  {
     Console.Write("Enter phrase to encrypt: ");
     string phrase = Console.ReadLine();
     MemoryStream memstrm = new MemoryStream();
     byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
                  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16};
     TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
     CryptoStream csw = new CryptoStream(memstrm,
                    tdes.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
     csw.Write(Encoding.ASCII.GetBytes(phrase), 0, phrase.Length);
     csw.FlushFinalBlock();
     byte[] cryptdata = memstrm.GetBuffer();
     Console.WriteLine("Encrypted: {0}",
             Encoding.ASCII.GetString(cryptdata, 0, (int)memstrm.Length));
     memstrm.Position = 0;
     byte[] data = new byte[1024];
     CryptoStream csr = new CryptoStream(memstrm,
                    tdes.CreateDecryptor(Key, IV), CryptoStreamMode.Read);
     int recv = csr.Read(data, 0, data.Length);
     string newphrase = Encoding.ASCII.GetString(data, 0, recv);
     Console.WriteLine("Decrypted: {0}", newphrase);
     csr.Close();
     csw.Close();
     memstrm.Close();
  }

}

      </source>