Ejemplo n.º 1
0
 public EncryptBack5(string path, byte[] key, byte[] IV, ToCode cod, int num, bool b, bool directory, string adr, string pass)
 {
     this.directory = directory;
     // файл
     try
     {
         if (directory)
         {
             // проверка надо ли удалять ключ
             if (b == false)
             {
                 File.Delete($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}.txt");
                 //this.Close();
             }
             else
             {
                 this.IV   = IV;
                 this.key  = key;
                 path      = Path.ChangeExtension(path, cod.Rassh);
                 this.path = path;
                 this.num  = num;
                 this.cod  = cod;
                 InitializeComponent();
             }
         }
         // папка
         else
         {
             // проверка надо ли удалять ключ
             if (b == false)
             {
                 File.Delete($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}.txt");
                 //this.Close();
             }
             else
             {
                 this.key  = key;
                 this.IV   = IV;
                 this.path = path.Remove(path.Length - 4);
                 this.num  = num;
                 this.cod  = cod;
                 InitializeComponent();
             }
         }
         // проверка
         if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon"))
         {
             // проверка существует ли журнал
             if (File.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Using.txt"))
             {
                 // добавляем наше устройство
                 normpath = path;
                 // сериализация данных о файле и о том как мы его должны закодировать
                 DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Together));
                 FileStream str = null;
                 try
                 {
                     str = new FileStream($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Using.txt", FileMode.Open);
                     Together a = (Together)json.ReadObject(str);
                     str.Close();
                     File.Delete($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Using.txt");
                     Array.Resize(ref a.mas, a.mas.Length + 1);
                     a.mas[a.mas.Length - 1] = new Processonefile(adr, pass, normpath, directory);
                     str = new FileStream($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Using.txt", FileMode.Create);
                     json.WriteObject(str, a);
                     str.Close();
                 }
                 catch (Exception ex)
                 {
                     MessageBox.Show("Two processes in one time");
                     Application.Exit();
                 }
             }
             else
             {
                 // создаем журнал и добавляем туда первое устройство
                 normpath = path;
                 DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Together));
                 Processonefile             type = new Processonefile(adr, pass, normpath, directory);
                 // класс одного файла
                 Processonefile[] typemas = new Processonefile[1] {
                     type
                 };
                 // класс всех изменяемых файлов из журнала
                 Together   a   = new Together(typemas);
                 FileStream str = new FileStream($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Using.txt", FileMode.Create);
                 json.WriteObject(str, a);
                 str.Close();
             }
         }
         else
         {
             MessageBox.Show("Sorry, something had happened");
             this.Close();
         }
         Encryptback.Text = $"Encrypt back \n {Path.ChangeExtension(path, cod.Rassh)}";
     }
     catch (Exception ex)
     {
         MessageBox.Show("Key were deleted");
     }
 }
Ejemplo n.º 2
0
        // кнопка для открытия (чтобы не прописывать в конструкторе)
        private void Open_Click(object sender, EventArgs e)
        {
            Open.Enabled   = false;
            label1.Visible = true;
            // проверка работает ли bluetooth
            if (BluetoothRadio.IsSupported)
            {
                // проверка расширения
                string k = Path.GetExtension(path);
                if (k == ".code3")
                {
                    // закрыываем кнопку
                    Open.Enabled = false;
                    // дезериализуем ключ и файл
                    DataContractJsonSerializer json2 = new DataContractJsonSerializer(typeof(Connectwithakey));
                    DataContractJsonSerializer json  = new DataContractJsonSerializer(typeof(ToCode));
                    FileStream st = null;
                    if (File.Exists(path))
                    {
                        try
                        {
                            st = new FileStream(path, FileMode.Open);
                        }
                        catch (IOException ex)
                        {
                            Console.WriteLine("Try again");
                        }
                        try
                        {
                            Connectwithakey con = null;
                            con           = (Connectwithakey)json2.ReadObject(st);
                            FindkeyNumber = con.file;
                            // номер ключа
                            this.num = int.Parse(Encoding.ASCII.GetString(con.keynumber));
                            st.Close();
                            byte[] serkey = null;
                            // извлечение ключа из файла
                            if (File.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}.txt"))
                            {
                                serkey = File.ReadAllBytes($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}.txt");
                                IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                                WindowsIdentity win          = new WindowsIdentity(accountToken);
                                // раскодируем
                                ID = win.User.ToString();
                                // ксорим с id в ASCII
                                byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                                int    q         = 0;
                                for (int i = 0; i < serkey.Length; i++)
                                {
                                    if (q == tocodekey.Length)
                                    {
                                        q = 0;
                                    }
                                    serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                                }
                                // создём вспомогательный файл для десериализации и извдечение полей класса
                                string help;
                                if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                                {
                                    help = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}Help.txt";
                                }
                                else
                                {
                                    help = $"../Pakman{num}Help.txt";
                                }
                                // файл нужен для десериализации (так быстрее чем с memorystream так как есть writeallbytes)
                                File.Create(help).Close();
                                File.WriteAllBytes(help, serkey);
                                FileStream l = new FileStream(help, FileMode.Open);
                                cod = (ToCode)json.ReadObject(l);
                                l.Close();
                                // удаляем вспомогательный файл
                                File.Delete(help);
                                // проверяем совпадение устройста
                                devicename   = cod.DeviceName;
                                deviceadress = cod.DeviceAdress;
                                // компонента bluetooth
                                BluetoothComponent component = new BluetoothComponent();
                                // добавляем метод который будет сделать если найдено новое устройство
                                component.DiscoverDevicesProgress += BluetoothDescovery;
                                // метод в конце работы
                                component.DiscoverDevicesComplete += BluetoothEndDescovery;
                                // поиск устройства
                                component.DiscoverDevicesAsync(10, true, false, true, true, 0);
                            }
                            else
                            {
                                if (File.Exists($"../Palon/Pakman{num}.txt"))
                                {
                                    serkey = File.ReadAllBytes($"../Palon/Pakman{num}.txt");

                                    IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                                    WindowsIdentity win          = new WindowsIdentity(accountToken);
                                    // раскодируем
                                    ID = win.User.ToString();
                                    // ксорим с id в ASCII
                                    byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                                    int    q         = 0;
                                    for (int i = 0; i < serkey.Length; i++)
                                    {
                                        if (q == tocodekey.Length)
                                        {
                                            q = 0;
                                        }
                                        serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                                    }
                                    // создём вспомогательный файл для десериализации и извдечение полей класса
                                    string help;
                                    if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                                    {
                                        help = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}Help.txt";
                                    }
                                    else
                                    {
                                        help = $"../Pakman{num}Help.txt";
                                    }
                                    // файл нужен для десериализации (так быстрее чем с memorystream так как есть writeallbytes)
                                    File.Create(help).Close();
                                    File.WriteAllBytes(help, serkey);
                                    FileStream l = new FileStream(help, FileMode.Open);
                                    cod = (ToCode)json.ReadObject(l);
                                    l.Close();
                                    // удаляем вспомогательный файл
                                    File.Delete(help);
                                    // проверяем совпадение устройста
                                    devicename   = cod.DeviceName;
                                    deviceadress = cod.DeviceAdress;
                                    // компонента bluetooth
                                    BluetoothComponent component = new BluetoothComponent();
                                    // добавляем метод который будет сделать если найдено новое устройство
                                    component.DiscoverDevicesProgress += BluetoothDescovery;
                                    // метод в конце работы
                                    component.DiscoverDevicesComplete += BluetoothEndDescovery;
                                    // поиск устройства
                                    component.DiscoverDevicesAsync(10, true, false, true, true, 0);
                                }
                                else
                                {
                                    MessageBox.Show("Something has happened with keys");
                                    this.Close();
                                }
                            }
                            //безопастность (учетная запись)
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Two programms are trying to encript file");
                            this.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Two programms are trying to encript file");
                        this.Close();
                    }
                }
                else
                {
                    DataContractJsonSerializer json2 = new DataContractJsonSerializer(typeof(Connectwithakey));
                    DataContractJsonSerializer json  = new DataContractJsonSerializer(typeof(ToCode));
                    // десереализуем файл
                    FileStream st = null;
                    if (File.Exists(path))
                    {
                        try
                        {
                            st = new FileStream(path, FileMode.Open);
                            Connectwithakey con = null;
                            con           = (Connectwithakey)json2.ReadObject(st);
                            FindkeyNumber = con.file;
                            // номер ключа
                            this.num = int.Parse(Encoding.ASCII.GetString(con.keynumber));
                            st.Close();
                            // извлечение ключа из файла
                            byte[] serkey = null;
                            // извлечение ключа из файла
                            if (File.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}.txt"))
                            {
                                serkey = File.ReadAllBytes($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}.txt");
                            }
                            else
                            {
                                if (File.Exists($"../Palon/PakmanD{num}.txt"))
                                {
                                    serkey = File.ReadAllBytes($"../Palon/PakmanD{num}.txt");
                                }
                                else
                                {
                                    MessageBox.Show("Something has happened with keys");
                                    this.Close();
                                }
                            }
                            //безопастность (учетная запись)
                            IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                            WindowsIdentity win          = new WindowsIdentity(accountToken);
                            // раскодируем ксоря c ID в ASCII
                            ID = win.User.ToString();
                            byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                            int    q         = 0;
                            for (int i = 0; i < serkey.Length; i++)
                            {
                                if (q == tocodekey.Length)
                                {
                                    q = 0;
                                }
                                serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                            }
                            // создём вспомогательный файл для десериализации и извдечение полей класса
                            string help;
                            if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                            {
                                help = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}Help.txt";
                            }
                            else
                            {
                                help = $"../PakmanD{num}Help.txt";
                            }
                            // перезаписываем файл для десериализации так удобней чем при memorystream так как writeallbytes
                            File.Create(help).Close();
                            File.WriteAllBytes(help, serkey);
                            FileStream l = new FileStream(help, FileMode.Open);
                            cod = (ToCode)json.ReadObject(l);
                            l.Close();
                            // удаляем вспомогательный файл
                            File.Delete(help);
                            // проверяем совпадение устройста
                            devicename   = cod.DeviceName;
                            deviceadress = cod.DeviceAdress;
                            // создаём компоненту поиска
                            BluetoothComponent component = new BluetoothComponent();
                            // добавляем метод при каждом нахождении нового устройствва
                            component.DiscoverDevicesProgress += BluetoothDescovery;
                            // метод в конце поиска
                            component.DiscoverDevicesComplete += BluetoothEndDescovery;
                            // начало писка
                            component.DiscoverDevicesAsync(10, true, false, true, true, 0);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Two programms are trying to encript file");
                            this.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Two programms are trying to encript file");
                        this.Close();
                    }
                }
            }
            // раскодируем по паролю
            else
            {
                // аналогично смотрим расширение
                string k = Path.GetExtension(path);
                if (k == ".code3")
                {
                    // откючаем кнопку
                    Open.Enabled = false;
                    DataContractJsonSerializer json2 = new DataContractJsonSerializer(typeof(Connectwithakey));
                    DataContractJsonSerializer json  = new DataContractJsonSerializer(typeof(ToCode));
                    // десериализуем основной файл
                    FileStream st = null;
                    if (File.Exists(path))
                    {
                        try
                        {
                            st = new FileStream(path, FileMode.Open);
                            Connectwithakey con = null;
                            con           = (Connectwithakey)json2.ReadObject(st);
                            FindkeyNumber = con.file;
                            // номер ключа
                            this.num = int.Parse(Encoding.ASCII.GetString(con.keynumber));
                            st.Close();
                            // извлечение ключа из файла
                            byte[] serkey = null;
                            // извлечение ключа из файла
                            if (File.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}.txt"))
                            {
                                serkey = File.ReadAllBytes($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}.txt");
                            }
                            else
                            {
                                if (File.Exists($"../Palon/Pakman{num}.txt"))
                                {
                                    serkey = File.ReadAllBytes($"../Palon/Pakman{num}.txt");
                                }
                                else
                                {
                                    MessageBox.Show("Something has happened with keys");
                                    this.Close();
                                }
                            }
                            //безопастность (учетная запись)
                            IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                            WindowsIdentity win          = new WindowsIdentity(accountToken);
                            // раскодируем ксоря с id ASCII
                            ID = win.User.ToString();
                            byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                            int    q         = 0;
                            for (int i = 0; i < serkey.Length; i++)
                            {
                                if (q == tocodekey.Length)
                                {
                                    q = 0;
                                }
                                serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                            }
                            // создём вспомогательный файл для десериализации и извдечение полей класса
                            string help;
                            if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                            {
                                help = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/Pakman{num}Help.txt";
                            }
                            else
                            {
                                help = $"../Pakman{num}Help.txt";
                            }
                            File.Create(help).Close();
                            File.WriteAllBytes(help, serkey);
                            FileStream l = new FileStream(help, FileMode.Open);
                            cod = (ToCode)json.ReadObject(l);
                            l.Close();
                            // удаляем вспомогательный файл
                            File.Delete(help);
                            // проверяем совпадение устройста
                            devicename   = cod.DeviceName;
                            deviceadress = cod.DeviceAdress;
                            // если устройства нет рядом просим ввести пароль
                            NotFoundCheckingPassword password = new NotFoundCheckingPassword(cod);
                            password.ShowDialog();
                            // проверка верности пароля
                            if (password.Pasbool)
                            {
                                Redeem();
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Two programms are trying to encript file");
                            this.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Two programms are trying to encript file");
                        this.Close();
                    }
                }
                else
                {
                    // десериализуем основной файл
                    DataContractJsonSerializer json2 = new DataContractJsonSerializer(typeof(Connectwithakey));
                    DataContractJsonSerializer json  = new DataContractJsonSerializer(typeof(ToCode));
                    FileStream st = null;
                    if (File.Exists(path))
                    {
                        try
                        {
                            st = new FileStream(path, FileMode.Open);
                            Connectwithakey con = null;
                            con           = (Connectwithakey)json2.ReadObject(st);
                            FindkeyNumber = con.file;
                            // номер ключа
                            this.num = int.Parse(Encoding.ASCII.GetString(con.keynumber));
                            st.Close();
                            // извлечение ключа из файла
                            byte[] serkey = null;
                            // извлечение ключа из файла
                            if (File.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}.txt"))
                            {
                                serkey = File.ReadAllBytes($"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}.txt");
                            }
                            else
                            {
                                if (File.Exists($"../Palon/PakmanD{num}.txt"))
                                {
                                    serkey = File.ReadAllBytes($"../Palon/PakmanD{num}.txt");
                                }
                                else
                                {
                                    MessageBox.Show("Something has happened with keys");
                                    this.Close();
                                }
                            }//безопастность (учетная запись)
                            IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                            WindowsIdentity win          = new WindowsIdentity(accountToken);
                            // раскодируем ксоря с ID в ASCII
                            ID = win.User.ToString();
                            byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                            int    q         = 0;
                            for (int i = 0; i < serkey.Length; i++)
                            {
                                if (q == tocodekey.Length)
                                {
                                    q = 0;
                                }
                                serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                            }
                            // создём вспомогательный файл для десериализации и извдечение полей класса
                            string help;
                            if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                            {
                                help = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon/PakmanD{num}Help.txt";
                            }
                            else
                            {
                                help = $"../PakmanD{num}Help.txt";
                            }
                            // так быстрее так как в memorystream нет writeallbytes
                            File.Create(help).Close();
                            File.WriteAllBytes(help, serkey);
                            FileStream l = new FileStream(help, FileMode.Open);
                            cod = (ToCode)json.ReadObject(l);
                            l.Close();
                            // удаляем вспомогательный файл
                            File.Delete(help);
                            // проверяем совпадение устройста
                            devicename   = cod.DeviceName;
                            deviceadress = cod.DeviceAdress;
                            // если устройства нет рядом просим ввести пароль
                            NotFoundCheckingPassword password = new NotFoundCheckingPassword(cod);
                            password.ShowDialog();
                            // проверка верности пароля
                            if (password.Pasbool)
                            {
                                Redeem();
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Two programms are trying to encript file");
                            this.Close();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Two programms are trying to encript file");
                        this.Close();
                    }
                }
            }
        }
Ejemplo n.º 3
0
 public NotFoundCheckingPassword(ToCode cod)
 {
     forpas = cod;
     InitializeComponent();
 }
Ejemplo n.º 4
0
        // кнопка готовности ввода
        private void Ready_Click_1(object sender, EventArgs e)
        {
            // проверка количества символов
            if (textBox1.Text.Length >= 8)
            {
                // проверка совпадения паролей
                if (textBox1.Text == textBox2.Text)
                {
                    // провекра файл или папка
                    if (bo == true)
                    {
                        string pathtodirectory = "";
                        // папка для ключей
                        if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                        {
                            pathtodirectory = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon";
                        }
                        else
                        {
                            pathtodirectory = $"../Palon";
                        }
                        // переменная для остановки подбора
                        bool b = true;
                        // подбор свободного номера для файла
                        int n = -1;
                        while (b)
                        {
                            n++;
                            if (!File.Exists($"{pathtodirectory}/Pakman{n}.txt"))
                            {
                                try
                                {
                                    //создаём папку для ключей
                                    Directory.CreateDirectory(pathtodirectory);
                                    // файл ключа
                                    File.Create($"{pathtodirectory}/Pakman{n}.txt").Close();
                                    // содержимое начального файла
                                    byte[] bytearr2 = File.ReadAllBytes(path);
                                    File.Delete(path);
                                    // генератор рандома
                                    Random gen = new Random();
                                    // генерация ключа
                                    byte[] key = new byte[32];
                                    for (int i = 0; i < key.Length; i++)
                                    {
                                        key[i] = (byte)gen.Next(0, 257);
                                    }
                                    // генерация IV
                                    byte[] IV = new byte[16];
                                    for (int i = 0; i < IV.Length; i++)
                                    {
                                        IV[i] = (byte)gen.Next(0, 255);
                                    }
                                    // переводим ключ в байтовый формат (чтобы можно было сериализовать и хранить более 256 ключей)
                                    byte[] keynumber = Encoding.ASCII.GetBytes(n.ToString());
                                    // Алгоритм кодировки AES
                                    // переводим в base64
                                    string Inbaseforencrypt = Convert.ToBase64String(bytearr2);
                                    // закодрованный массив байтов
                                    byte [] tofile = EncryptAES(Inbaseforencrypt, key, IV);
                                    // объединяем номер файла с основной информцией и сериализуем
                                    Connectwithakey connect = new Connectwithakey(tofile, keynumber);
                                    // записываем в старый путь

                                    FileStream str = new FileStream(path, FileMode.OpenOrCreate);
                                    DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Connectwithakey));
                                    js.WriteObject(str, connect);
                                    str.Close();
                                    // берём пароль
                                    string pass = textBox1.Text;
                                    // для кодирования берется айди безопасности учетно записи, чтобы нельзя было открыть с другого компа
                                    IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                                    WindowsIdentity win          = new WindowsIdentity(accountToken);
                                    string          ID           = win.User.ToString();
                                    // ключ ксорится с win
                                    byte[] onlykey = Encoding.UTF8.GetBytes(ID);
                                    int    q       = 0;
                                    for (int i = 0; i < key.Length; i++)
                                    {
                                        if (q == onlykey.Length)
                                        {
                                            q = 0;
                                        }
                                        key[i] = (byte)(key[i] ^ onlykey[q]);
                                    }
                                    // сериализация всех данных безопасности
                                    ToCode serfile = new ToCode(key, IV, Name2, adress, pass, Path.GetExtension(path));
                                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ToCode));
                                    // путь к ключу
                                    string     pathforkey = $"{pathtodirectory}/Pakman{n}.txt";
                                    FileStream fileStream = new FileStream(pathforkey, FileMode.Open);
                                    // сериализуем и записываем ключ
                                    serializer.WriteObject(fileStream, serfile);
                                    fileStream.Close();
                                    // вновь читаем чтобы всё вместе закодировать
                                    byte[] serkey = File.ReadAllBytes(pathforkey);
                                    // ксорим всё вместе с ID в кодировке ASCII
                                    byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                                    q = 0;
                                    for (int i = 0; i < serkey.Length; i++)
                                    {
                                        if (q == tocodekey.Length)
                                        {
                                            q = 0;
                                        }
                                        serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                                    }
                                    // записываем обратно  файл
                                    File.WriteAllBytes(pathforkey, serkey);
                                    // останавливаем подбор файло для ключа
                                    b = false;
                                    // меняем расширение файла для сериализации
                                    bool   filename  = true;
                                    int    number    = 2;
                                    string pathcheck = path;
                                    // подбираем файл таким образом чтобы не было повтора
                                    pathcheck = Path.ChangeExtension(pathcheck, ".code3");
                                    if (File.Exists(pathcheck))
                                    {
                                        while (filename)
                                        {
                                            pathcheck = Path.ChangeExtension(pathcheck, "");
                                            pathcheck = pathcheck.Remove(pathcheck.Length - 1);
                                            pathcheck = $"{pathcheck}{number}";
                                            pathcheck = Path.ChangeExtension(pathcheck, ".code3");
                                            if (!File.Exists(pathcheck))
                                            {
                                                filename = false;
                                            }
                                        }
                                    }
                                    File.Move(path, pathcheck);
                                    this.Close();
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show("Something bad had happened");
                                    this.Close();
                                    b = false;
                                }
                            }
                        }
                    }
                    else
                    {
                        string pathtodirectory = "";
                        // папка для ключей
                        if (Directory.Exists($"C:/Users/{Environment.UserName}/AppData/Roaming"))
                        {
                            pathtodirectory = $"C:/Users/{Environment.UserName}/AppData/Roaming/Palon";
                        }
                        else
                        {
                            pathtodirectory = $"../Palon";
                        }
                        // переменная для подбора свободного ключа
                        bool b = true;
                        // подбор свободного номера для файла
                        int n = -1;
                        while (b)
                        {
                            n++;
                            // проверка существования ключа
                            if (!File.Exists($"{pathtodirectory}/PakmanD{n}.txt"))
                            {
                                try
                                {
                                    // меняем путь
                                    string direct = Path.ChangeExtension(path, "txt");
                                    int    num    = 2;
                                    bool   exist  = true;
                                    // архивируем
                                    while (exist)
                                    {
                                        if (!File.Exists(direct))
                                        {
                                            ZipFile.CreateFromDirectory(path, direct);
                                            exist = false;
                                        }
                                        else
                                        {
                                            direct = Path.ChangeExtension(path, $"txt{num}");
                                            num++;
                                        }
                                    }
                                    Directory.Delete(path, true);
                                    //создаём папку для ключей
                                    Directory.CreateDirectory(pathtodirectory);
                                    // файл ключа
                                    File.Create($"{pathtodirectory}/PakmanD{n}.txt").Close();
                                    // читаем данные архивированной папки
                                    byte[] bytearr2 = File.ReadAllBytes(direct);
                                    // удаляем архивированную папку
                                    File.Delete(direct);
                                    // генератор рандома
                                    Random gen = new Random();
                                    // генерация ключа
                                    byte[] key = new byte[32];
                                    for (int i = 0; i < key.Length; i++)
                                    {
                                        key[i] = (byte)gen.Next(0, 257);
                                    }
                                    // генераия IV
                                    byte[] IV = new byte[16];
                                    for (int i = 0; i < IV.Length; i++)
                                    {
                                        IV[i] = (byte)gen.Next(0, 255);
                                    }
                                    // переводим ключ в байтовый формат (чтобы можно было хранить более 256 ключей)
                                    byte[] keynumber = Encoding.ASCII.GetBytes(n.ToString());
                                    // Алгоритм кодировки AES
                                    // переводим в base64
                                    string Inbaseforencrypt = Convert.ToBase64String(bytearr2);
                                    // энкриптим
                                    byte[] tofile = EncryptAES(Inbaseforencrypt, key, IV);
                                    // объединяем номер файла с основной информцией и сериализуем
                                    Connectwithakey connect = new Connectwithakey(tofile, keynumber);
                                    // записывем получившееся в новый файл
                                    FileStream str = new FileStream(direct, FileMode.OpenOrCreate);
                                    DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Connectwithakey));
                                    js.WriteObject(str, connect);
                                    str.Close();
                                    // пароль
                                    string pass = textBox1.Text;
                                    // для кодирования берется айди безопасности учетно записи, чтобы нельзя было открыть с другого компа
                                    IntPtr          accountToken = WindowsIdentity.GetCurrent().Token;
                                    WindowsIdentity win          = new WindowsIdentity(accountToken);
                                    string          ID           = win.User.ToString();
                                    // ключ ксорится с win
                                    byte[] onlykey = Encoding.UTF8.GetBytes(ID);
                                    int    q       = 0;
                                    for (int i = 0; i < key.Length; i++)
                                    {
                                        if (q == onlykey.Length)
                                        {
                                            q = 0;
                                        }
                                        key[i] = (byte)(key[i] ^ onlykey[q]);
                                    }
                                    // сериализация всех данных безопасности
                                    ToCode serfile = new ToCode(key, IV, Name2, adress, pass, Path.GetExtension(direct));
                                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ToCode));
                                    string     pathforkey = $"{pathtodirectory}/PakmanD{n}.txt";
                                    FileStream fileStream = new FileStream(pathforkey, FileMode.Open);
                                    // записывем в фвйл
                                    serializer.WriteObject(fileStream, serfile);
                                    fileStream.Close();
                                    // вновь читаем для того чтобы всё ксорить с ID в кодировке ASCII
                                    byte[] serkey    = File.ReadAllBytes(pathforkey);
                                    byte[] tocodekey = Encoding.ASCII.GetBytes(ID);
                                    q = 0;
                                    // ксорим
                                    for (int i = 0; i < serkey.Length; i++)
                                    {
                                        if (q == tocodekey.Length)
                                        {
                                            q = 0;
                                        }
                                        serkey[i] = (byte)(serkey[i] ^ tocodekey[q]);
                                    }
                                    // записываем
                                    File.WriteAllBytes(pathforkey, serkey);
                                    // избегаем повтора
                                    b = false;
                                    // меняем расширение файла для сериализации
                                    // проверяем чтобы не было исключений
                                    bool   filename  = true;
                                    int    number    = 2;
                                    string pathcheck = direct;
                                    // подбираем файл таким образом чтобы не было повтора
                                    pathcheck = Path.ChangeExtension(pathcheck, ".code4");
                                    if (File.Exists(pathcheck))
                                    {
                                        while (filename)
                                        {
                                            pathcheck = Path.ChangeExtension(pathcheck, "");
                                            pathcheck = pathcheck.Remove(pathcheck.Length - 1);
                                            pathcheck = $"{pathcheck}{number}";
                                            pathcheck = Path.ChangeExtension(pathcheck, ".code4");
                                            if (!File.Exists(pathcheck))
                                            {
                                                filename = false;
                                            }
                                        }
                                    }
                                    // переводим файл в новое расширение
                                    File.Move(direct, pathcheck);
                                    this.Close();
                                }
                                catch
                                {
                                    MessageBox.Show("Two files");
                                    this.Close();
                                    b = false;
                                }
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Passwords do not match");
                }
            }
            else
            {
                MessageBox.Show("The password must be at least eight characters");
            }
        }