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); } }
/// <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); }
/// <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); }
public void Kuznyechik() { Kuznyechik cipher = new Kuznyechik(); cipher.SetKey(_ref_key); CollectionAssert.AreEqual(_ref_cipher, cipher.Encrypt(_ref_plain)); }
/// <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); }
/// <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); }