Расшифровка текста - C#
Формулировка задачи:
Помогите расшифровать следующее слово: Метод расшифровки, обязательно должен принимать 2 аргумента: string text и int[] key:
зн-оо-есьпс-бат
с уже известным ключом:42013
По теоритической части, расшифровка делается так: 1) берется зашифрованное словозн-оо-есьпс-бат
2) распознаем ширину и высоту матрицы с помощью ключа: 42013 зн-оо -есьп с-бат * Ширина - берется от размерности ключа, в данном случае 5 * Высота - берется от количества колонок, в данном случае 3 3) Ключевым элементом в данном случае является определение высоты = 3. Рассписываем слово: зн-оо-есьпс-бат , т.к, высота = 3, будем брать по 3 буквы и выстраивать по ключу 42013 Берем первые три буквы : зн- Размещаем их в цифре 0 у ключа: 42013 XXзXX ХХнХХ ХХ-ХХ Потом берем следующие три буквы: оо- и размещаем их уже в цифре 1 у ключа 42013 ХХзоХ ХХноХ ХХ--Х И т.д., и в итоге получим расшифрованное слово: безопасность Ссылка на предыдущую тему по шифрованию этого слова: Вытащить столбец по заданному ключу Спасибо, заранее за помощь!
Расшифровка - как говорится обратный процесс шифрования, вот имеется метод шифрования, может кто-нибудь сможет по нему ориентируясь , сделать расшифровку ?
public static string EncryptToVertical(string text, int[] key) { text = text.Replace(' ', '-'); if (key.Length == 0 || key.Length > text.Length) throw new ArgumentOutOfRangeException("Неверный ключ."); // Сколько нужно символов дополнить в конец int charNeeds = text.Length % key.Length + 1; text = text.PadRight(text.Length + charNeeds, '-'); // Строку в столбец int endIndex = text.Length / key.Length; string[] parts = new string[endIndex]; for (int i = 0; i < endIndex; i++) { parts[i] = text.Substring(i * key.Length, key.Length); } var sb = new StringBuilder(); string[] result = new string[key.Length]; for (int keyIndex = 0; keyIndex < key.Length; keyIndex++) { sb.Clear(); for (int i = 0; i < parts.Length; i++) { sb.Append(parts[i][keyIndex]); } result[key[keyIndex]] = sb.ToString(); } sb.Clear(); for (int s = 0; s < key.Length; s++) sb.Append(result[s]); return sb.ToString(); }
public static string DecodingToVertical(string text, int[] key) {...}
Нужна помощь!
tezaurismosis
прошу вашей помощи!!!Решение задачи: «Расшифровка текста»
textual
Листинг программы
public static string DecryptToVertical(string text, int[] key) { text = text.Replace('-', ' '); if (key.Length == 0 || key.Length > text.Length) throw new ArgumentOutOfRangeException("Неверный ключ."); // Количество строк в массиве int rows = text.Length / key.Length; char[,] data = new char[key.Length, rows]; for (int keyIndex = 0; keyIndex < key.Length; keyIndex++) { for (int charIndex = 0; charIndex < rows; charIndex++) { data[keyIndex, charIndex] = text[key[keyIndex] * rows + charIndex]; } } var sb = new StringBuilder(); for (int i = 0; i < rows; i++) for (int j = 0; j < key.Length; j++) sb.Append(data[j, i]); return sb.ToString().TrimEnd(' '); } internal static void Main() { int[] key = { 2, 1, 0 }; string enc = EncryptToVertical("Здравствуй мир! Да здравствует мир!", key); Console.WriteLine(DecryptToVertical(enc, key)); // Здравствуй мир! Да здравствует мир! }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д