Расшифровка текста - C#

Узнай цену своей работы

Формулировка задачи:

Помогите расшифровать следующее слово:

зн-оо-есьпс-бат

с уже известным ключом:

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();
}
Метод расшифровки, обязательно должен принимать 2 аргумента: string text и int[] key:
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));
    // Здравствуй мир! Да здравствует мир!
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы