Пример #1
0
        public void Kuznyechik()
        {
            Kuznyechik cipher = new Kuznyechik();

            cipher.SetKey(_ref_key);
            CollectionAssert.AreEqual(_ref_cipher, cipher.Encrypt(_ref_plain));
        }
        private void textBoxPlaintext_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (encryptMode != true)
            {
                return;
            }
            int x = textBoxPlaintext.SelectionStart;

            textBoxPlaintext.Text           = textBoxPlaintext.Text.ToUpper();
            textBoxPlaintext.SelectionStart = x;
            if ((textBoxPlaintext != null && textBoxPlaintext.Text.Length == 32) && (textBoxKey != null && textBoxKey.Text.Length == 64))
            {
                if (XBoxVisualization.IsActive() == true)
                {
                    XBoxVisualization.DeleteContent(mainWindow);
                }
                if (SBoxVisualization.IsActive() == true)
                {
                    SBoxVisualization.DeleteContent(mainWindow);
                }
                if (LBoxVisualization.IsActive() == true)
                {
                    LBoxVisualization.DeleteContent(mainWindow);
                }
                if (Reversed_LBoxVisualization.IsActive() == true)
                {
                    Reversed_LBoxVisualization.DeleteContent(mainWindow);
                }

                k = new Kuznyechik(textBoxPlaintext.Text, textBoxKey.Text, "");
                textBoxCiphertext.Text = k.ToString();
                EncryptBox.DeleteContent(mainWindow);
                EncryptBox.GenerateContent(mainWindow, k);
            }
        }
        private void changeMode_Click(object sender, RoutedEventArgs e)
        {
            if (XBoxVisualization.IsActive() == true)
            {
                XBoxVisualization.DeleteContent(mainWindow);
            }
            if (SBoxVisualization.IsActive() == true)
            {
                SBoxVisualization.DeleteContent(mainWindow);
            }
            if (LBoxVisualization.IsActive() == true)
            {
                LBoxVisualization.DeleteContent(mainWindow);
            }
            if (Reversed_LBoxVisualization.IsActive() == true)
            {
                Reversed_LBoxVisualization.DeleteContent(mainWindow);
            }

            object  wantedNode = mainWindow.FindName("cryptTab");
            TabItem cryptTab   = wantedNode as TabItem;

            wantedNode = mainWindow.FindName("encryptArrow");
            Polygon encryptArrow = wantedNode as Polygon;

            wantedNode = mainWindow.FindName("decryptArrow");
            Polygon decryptArrow = wantedNode as Polygon;

            if (encryptMode == true)
            {
                encryptMode             = false;
                k                       = new Kuznyechik("", textBoxKey.Text, textBoxCiphertext.Text);
                cryptTab.Header         = "Decrypt";
                encryptArrow.Visibility = Visibility.Hidden;
                decryptArrow.Visibility = Visibility.Visible;
                EncryptBox.DeleteContent(mainWindow);
                DecryptBox.GenerateContent(mainWindow, k);
                textBoxCiphertext.IsReadOnly = false;
                textBoxPlaintext.IsReadOnly  = true;
            }
            else   //encryptMode == false
            {
                encryptMode             = true;
                k                       = new Kuznyechik(textBoxPlaintext.Text, textBoxKey.Text, "");
                cryptTab.Header         = "Encrypt";
                encryptArrow.Visibility = Visibility.Visible;
                decryptArrow.Visibility = Visibility.Hidden;
                DecryptBox.DeleteContent(mainWindow);
                EncryptBox.GenerateContent(mainWindow, k);
                textBoxCiphertext.IsReadOnly = true;
                textBoxPlaintext.IsReadOnly  = false;
            }
        }
        private void textBoxKey_TextChanged(object sender, TextChangedEventArgs e)
        {
            int x = textBoxKey.SelectionStart;

            textBoxKey.Text           = textBoxKey.Text.ToUpper();
            textBoxKey.SelectionStart = x;
            if ((textBoxKey != null && textBoxKey.Text.Length == 64) && ((encryptMode == true && textBoxPlaintext != null && textBoxPlaintext.Text.Length == 32) || (encryptMode == false && textBoxCiphertext != null && textBoxCiphertext.Text.Length == 32)))
            {
                if (XBoxVisualization.IsActive() == true)
                {
                    XBoxVisualization.DeleteContent(mainWindow);
                }
                if (SBoxVisualization.IsActive() == true)
                {
                    SBoxVisualization.DeleteContent(mainWindow);
                }
                if (LBoxVisualization.IsActive() == true)
                {
                    LBoxVisualization.DeleteContent(mainWindow);
                }
                if (Reversed_LBoxVisualization.IsActive() == true)
                {
                    Reversed_LBoxVisualization.DeleteContent(mainWindow);
                }
                if (encryptMode == true)
                {
                    k = new Kuznyechik(textBoxPlaintext.Text, textBoxKey.Text, "");
                    textBoxCiphertext.Text = k.ToString();
                    EncryptBox.DeleteContent(mainWindow);
                    EncryptBox.GenerateContent(mainWindow, k);
                }
                else   //encryptMode == false
                {
                    k = new Kuznyechik("", textBoxKey.Text, textBoxCiphertext.Text);
                    textBoxPlaintext.Text = k.ToString();
                    DecryptBox.DeleteContent(mainWindow);
                    DecryptBox.GenerateContent(mainWindow, k);
                }
                KeyGenBox.DeleteContent(mainWindow);
                KeyGenBox.GenerateContent(mainWindow, k);
                IntroBox.DeleteContent(mainWindow);
                IntroBox.GenerateContent(mainWindow, k);
            }
        }
Пример #5
0
        /// <summary>
        /// Шифратор
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="cipher"></param>
        /// <returns></returns>
        private static byte[] Encrypt(string data, byte[] key, string cipher)
        {
            byte[] result;
            int    sizeBlock;

            switch (cipher)
            {
            case "Нет":
                result = Encoding.GetEncoding(866).GetBytes(data);
                break;

            case "Кузнечик":
                Kuznyechik kuznyechik = new Kuznyechik();
                sizeBlock = 16;

                //Если количество блоков не пропорционально размеру блока, то дописываем символы заполнения
                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                //Кодируем текст в массив байт
                byte[] dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result = new byte[dataBytes.Length];

                //В цикле формируем блоки...
                for (int i = 0; i < dataBytes.Length; i += sizeBlock)
                {
                    byte[] data8bytes = new byte[sizeBlock];

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        data8bytes[k] = dataBytes[k + i];
                    }

                    //...и зашфровывем эти блоки с помощью ключа
                    byte[] dataE8bytes = kuznyechik.encrypt(data8bytes, key);

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        result[k + i] = dataE8bytes[k];
                    }
                }
                break;

            case "Магма":
                //Аналогично Кузнечику
                Magma magma = new Magma();
                sizeBlock = 8;

                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result    = magma.Encode(dataBytes, key);
                break;

            case "AES":
                //Аналогично Кузнечику
                sizeBlock = 16;

                Aes aes = Aes.Create();
                aes.Mode      = CipherMode.ECB;
                aes.KeySize   = 256;
                aes.BlockSize = sizeBlock * 8;
                aes.Key       = key;
                aes.Padding   = PaddingMode.Zeros;

                ICryptoTransform encryptor = aes.CreateEncryptor();

                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result    = encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length);
                break;

            default:
                result = null;
                break;
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// Дешифратор
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        private static string Decrypt(Packet packet, byte[] key)
        {
            string result = "";
            int    sizeBlock;

            //В зависимости от шифра, выполняются разные действия
            switch (packet.cipher)
            {
            case "Нет":
            case null:
                //Если шифра нет, то просто декодируем байты в текст
                result = Encoding.GetEncoding(866).GetString(packet.data);
                break;

            case "Кузнечик":
                Kuznyechik kuznyechik = new Kuznyechik();
                sizeBlock = 16;

                //Количество байт
                byte[] dataD = new byte[packet.data.Length];

                //В цикле формируем блоки указанного размера...
                for (int i = 0; i < packet.data.Length; i += sizeBlock)
                {
                    byte[] data8bytes = new byte[sizeBlock];

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        data8bytes[k] = packet.data[k + i];
                    }

                    //...и дешифруем каждый блок в отдельности с помощью ключа
                    byte[] dataD8bytes = kuznyechik.decrypt(data8bytes, key);

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        dataD[k + i] = dataD8bytes[k];
                    }
                }

                //Декодируем расшифрованный набор байт в текст
                result = Encoding.GetEncoding(866).GetString(dataD);
                result = result.Replace("┼", "");     //Убираем симвлоы заполнения блока
                break;

            case "Магма":
                //Аналогично Кузнечику
                Magma magma = new Magma();
                sizeBlock = 8;
                dataD     = magma.Decode(packet.data, key);
                result    = Encoding.GetEncoding(866).GetString(dataD);
                result    = result.Replace("┼", "");
                break;

            case "AES":
                //Аналогично Кузнечику
                sizeBlock = 16;

                Aes aes = Aes.Create();
                aes.Mode      = CipherMode.ECB;
                aes.KeySize   = 256;
                aes.BlockSize = sizeBlock * 8;
                aes.Key       = key;
                aes.Padding   = PaddingMode.Zeros;

                ICryptoTransform encryptor = aes.CreateDecryptor();

                dataD  = encryptor.TransformFinalBlock(packet.data, 0, packet.data.Length);
                result = Encoding.GetEncoding(866).GetString(dataD);
                result = result.Replace("┼", "");
                break;

            default:
                result = null;
                break;
            }

            return(result);
        }
Пример #7
0
 public void Kuznyechik()
 {
     Kuznyechik cipher = new Kuznyechik();
     cipher.SetKey(_ref_key);
     CollectionAssert.AreEqual(_ref_cipher, cipher.Encrypt(_ref_plain));
 }
Пример #8
0
        /// <summary>
        /// Дешифратор
        /// </summary>
        /// <param name="packet"></param>
        /// <returns></returns>
        static string Decrypt(Packet packet)
        {
            string result = "";

            byte[] dataD;
            int    sizeBlock;

            switch (packet.cipher)
            {
            case "Нет":
            case null:
                result = Encoding.GetEncoding(866).GetString(packet.data);
                break;

            case "Кузнечик":
                Kuznyechik kuznyechik = new Kuznyechik();
                sizeBlock = 16;
                dataD     = new byte[packet.data.Length];

                for (int i = 0; i < packet.data.Length; i += sizeBlock)
                {
                    byte[] data8bytes = new byte[sizeBlock];

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        data8bytes[k] = packet.data[k + i];
                    }

                    byte[] dataD8bytes = kuznyechik.decrypt(data8bytes, key);

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        dataD[k + i] = dataD8bytes[k];
                    }
                }

                result = Encoding.GetEncoding(866).GetString(dataD);
                result = result.Replace("┼", "");
                break;

            case "Магма":
                Magma magma = new Magma();
                dataD  = magma.Decode(packet.data, key);
                result = Encoding.GetEncoding(866).GetString(dataD);
                result = result.Replace("┼", "");
                break;

            case "AES":
                sizeBlock = 16;

                Aes aes = Aes.Create();
                aes.Mode      = CipherMode.ECB;
                aes.KeySize   = 256;
                aes.BlockSize = sizeBlock * 8;
                aes.Key       = key;
                aes.Padding   = PaddingMode.Zeros;

                ICryptoTransform decryptor = aes.CreateDecryptor();

                dataD  = decryptor.TransformFinalBlock(packet.data, 0, packet.data.Length);
                result = Encoding.GetEncoding(866).GetString(dataD);
                result = result.Replace("┼", "");
                break;

            default:
                result = null;
                break;
            }

            return(result);
        }
Пример #9
0
        /// <summary>
        /// Шифратор
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private Packet Encrypt(string data)
        {
            byte[] result;
            byte[] dataBytes;
            int    sizeBlock;

            string cipher = comboBox1.SelectedItem.ToString();

            switch (cipher)
            {
            case "Нет":
                result = Encoding.GetEncoding(866).GetBytes(data);
                break;

            case "Кузнечик":
                Kuznyechik kuznyechik = new Kuznyechik();
                sizeBlock = 16;

                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result    = new byte[dataBytes.Length];

                for (int i = 0; i < dataBytes.Length; i += sizeBlock)
                {
                    byte[] data8bytes = new byte[sizeBlock];

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        data8bytes[k] = dataBytes[k + i];
                    }

                    byte[] dataE8bytes = kuznyechik.encrypt(data8bytes, key);

                    for (int k = 0; k < sizeBlock; k++)
                    {
                        result[k + i] = dataE8bytes[k];
                    }
                }
                break;

            case "Магма":
                Magma magma = new Magma();
                sizeBlock = 8;

                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result    = magma.Encode(dataBytes, key);
                break;

            case "AES":
                sizeBlock = 16;

                Aes aes = Aes.Create();
                aes.Mode      = CipherMode.ECB;
                aes.KeySize   = 256;
                aes.BlockSize = sizeBlock * 8;
                aes.Key       = key;
                aes.Padding   = PaddingMode.Zeros;

                ICryptoTransform encryptor = aes.CreateEncryptor();

                while (data.Length % sizeBlock != 0)
                {
                    data += "┼";
                }

                dataBytes = Encoding.GetEncoding(866).GetBytes(data);
                result    = encryptor.TransformFinalBlock(dataBytes, 0, sizeBlock);
                break;

            default:
                result = null;
                break;
            }

            Packet packet = new Packet();

            packet.data   = result;
            packet.cipher = cipher;
            return(packet);
        }