Exemple #1
0
        private void btn_connect_Click(object sender, EventArgs e)
        {
            if (VerbindungOK)
            {
                VerbindungOK = false;
                DisconnectVerbindung();
            }
            else
            {
                Tclient          = new MyTcpClient(txt_host.Text, Convert.ToInt32(txt_port.Text));
                hmacVergleich[0] = Convert.ToString("RsaPublicRequest" + "|" + TcpServer.IP + "|" + TcpServer.Port);
                Tclient.Connect(hmacVergleich[0]);

                Thread.Sleep(500);
                if (VerbindungOK)
                {
                    ReleaseVerbindung();
                }
                else
                {
                    DisconnectVerbindung();
                }
            }
        }
Exemple #2
0
        private void server_receiving()
        {
            while (true)
            {
                String temp = TcpServer.WaitForConnectionAndMessage();
                //Console.WriteLine(temp);

                String[] tempsplit = temp.Split('|');

                if (VerbindungOK)
                {
                    if (tempsplit[0].Equals("Message"))
                    {
                        Tclient = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));

                        byte[] receiveKiv = System.Convert.FromBase64String(tempsplit[3]);
                        byte[] receiveMsg = System.Convert.FromBase64String(tempsplit[4]);
                        //byte[] receiveHash = System.Convert.FromBase64String(tempsplit[5]);
                        serverAes.setIV(receiveKiv);
                        String Nachricht = serverAes.DecryptAes(receiveMsg);

                        SetText(tempsplit[1] + ":\t" + Nachricht);
                    }
                }
                else
                {
                    // Anfrage vom RSA Public Key
                    // Senden vom RSA Public Key
                    if (tempsplit[0].Equals("RsaPublicRequest"))
                    {
                        Tclient          = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));
                        hmacVergleich[0] = temp;
                        hmacVergleich[1] = ("RsaPublicAnswer" + "|" + TcpServer.IP + "|" + TcpServer.Port + "|" + serverRSA.PublicKeyget());
                        Tclient.Connect(hmacVergleich[1]);
                    }
                    // Empfagen von der RSA Public Key
                    // Senden vom AES Key verschlüsselt mit dem RSA Public Key
                    else if (tempsplit[0].Equals("RsaPublicAnswer"))
                    {
                        Tclient          = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));
                        hmacVergleich[1] = temp;

                        clientRSA.PublicKeyset(tempsplit[3]);

                        //String strAesKey = Encoding.ASCII.GetString(serverAes.getKey());
                        String strAesKey    = System.Convert.ToBase64String(serverAes.getKey());
                        byte[] strRsaAesKey = clientRSA.verschluesseln(strAesKey);
                        //byte[] text = System.Text.Encoding.UTF8.GetBytes(strRsaAesKey);
                        String strRsaAesBase64Key = System.Convert.ToBase64String(strRsaAesKey);

                        // HMAC verschlüsseln und senden
                        String strHmacKey          = System.Convert.ToBase64String(hmac.secretkey);
                        byte[] strRsaHmacKey       = clientRSA.verschluesseln(strHmacKey);
                        String strRsaHmacBase64Key = System.Convert.ToBase64String(strRsaHmacKey);

                        hmacVergleich[2] = ("AesSetKey" + "|" + TcpServer.IP + "|" + TcpServer.Port + "|" + strRsaAesBase64Key + "|" + strRsaHmacBase64Key);
                        Tclient.Connect(hmacVergleich[2]);
                    }
                    // Empfgangen vom AES Key verschlüssellt im RSA Public Key
                    // Sende AES Test string
                    else if (tempsplit[0].Equals("AesSetKey"))
                    {
                        Tclient          = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));
                        hmacVergleich[2] = temp;

                        ////////byte[] strRsaAesBas64Key = System.Convert.FromBase64String(getkeytest());
                        byte[] strRsaAesBas64Key = System.Convert.FromBase64String(tempsplit[3]);
                        //String text = System.Text.Encoding.UTF8.GetString(strRsaAesBas64Key);
                        string AesRsaSchluessel = serverRSA.entschluesseln(strRsaAesBas64Key);
                        byte[] AesSchluessel    = System.Convert.FromBase64String(AesRsaSchluessel);
                        serverAes.setKey(AesSchluessel);

                        byte[] strRsaHmacBase64Key = System.Convert.FromBase64String(tempsplit[4]);
                        string strRsaHmacKey       = serverRSA.entschluesseln(strRsaHmacBase64Key);
                        byte[] strHmacKey          = System.Convert.FromBase64String(strRsaHmacKey);
                        hmac.secretkey = strHmacKey;

                        String SendingKiv = System.Convert.ToBase64String(serverAes.getKIV());
                        String SendingMsg = System.Convert.ToBase64String(serverAes.EncryptAes("ValidString"));

                        hmacVergleich[3] = ("AesCheck" + "|" + TcpServer.IP + "|" + TcpServer.Port + "|" + SendingKiv + "|" + SendingMsg);
                        Tclient.Connect(hmacVergleich[3]);
                    }
                    // Emfange Prüfstring
                    // Sende Prüfstring in AES with new IV. Setze Verbindung auf OK
                    else if (tempsplit[0].Equals("AesCheck"))
                    {
                        Tclient          = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));
                        hmacVergleich[3] = temp;

                        byte[] receiveKiv = System.Convert.FromBase64String(tempsplit[3]);
                        byte[] receiveMsg = System.Convert.FromBase64String(tempsplit[4]);
                        serverAes.setIV(receiveKiv);
                        String Nachricht = serverAes.DecryptAes(receiveMsg);

                        String SendingKiv = System.Convert.ToBase64String(serverAes.getNewIV());
                        String SendingMsg = System.Convert.ToBase64String(serverAes.EncryptAes("ValidRequestString"));

                        hmacVergleich[4] = ("AesRequestCheck" + "|" + TcpServer.IP + "|" + TcpServer.Port + "|" + SendingKiv + "|" + SendingMsg);
                        Tclient.Connect(hmacVergleich[4]);

                        if (Nachricht.Equals("ValidString"))
                        {
                            Console.WriteLine("VERSCHLUESSELTE VERBINDUNG ERFOLGREICH HERGESTELLT!");
                            //VerbindungOK = true;
                        }
                    }
                    // Empfange Prüfstring in AES
                    // Setzte Verbindung auf OK und sende Hmac Check
                    else if (tempsplit[0].Equals("AesRequestCheck"))
                    {
                        Tclient          = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));
                        hmacVergleich[4] = temp;
                        String strHmacSigned = hmac.SignFileArray(hmacVergleich);

                        byte[] receiveKiv = System.Convert.FromBase64String(tempsplit[3]);
                        byte[] receiveMsg = System.Convert.FromBase64String(tempsplit[4]);
                        serverAes.setIV(receiveKiv);
                        String Nachricht = serverAes.DecryptAes(receiveMsg);

                        if (Nachricht.Equals("ValidRequestString"))
                        {
                            SetText("Verbindung mit " + tempsplit[1] + ":" + tempsplit[2] + " erfolgreich hergestellt!");
                            Console.WriteLine("VERSCHLUESSELTE VERBINDUNG ERFOLGREICH HERGESTELLT!");
                            VerbindungOK = true;
                            //ReleaseVerbindung();
                        }

                        String SendingKiv = System.Convert.ToBase64String(serverAes.getNewIV());
                        String SendingMsg = System.Convert.ToBase64String(serverAes.EncryptAes(strHmacSigned));

                        Tclient.Connect("HmacCheck" + "|" + TcpServer.IP + "|" + TcpServer.Port + "|" + SendingKiv + "|" + SendingMsg);
                    }
                    else if (tempsplit[0].Equals("HmacCheck"))
                    {
                        Tclient = new MyTcpClient(tempsplit[1], Convert.ToInt32(tempsplit[2]));

                        //String strHmacSigned = hmac.SignFileArray(hmacVergleich);

                        byte[] receiveKiv = System.Convert.FromBase64String(tempsplit[3]);
                        byte[] receiveMsg = System.Convert.FromBase64String(tempsplit[4]);
                        serverAes.setIV(receiveKiv);
                        String Nachricht = serverAes.DecryptAes(receiveMsg);

                        if (hmac.VerifyFileArray(hmacVergleich, Nachricht))
                        {
                            Console.WriteLine("Nachrichten verifiziert!");
                            SetText("Verbindung mit " + tempsplit[1] + ":" + tempsplit[2] + " erfolgreich hergestellt!");
                            VerbindungOK = true;
                        }
                    }
                }
            }
        }