Program23
@Program23
Графический дизайнер

Как дешифровать объедененные строки?

Задача:
Зашифрованный текст должен храниться в файле текстового формата вместе с ключом. Перед записью в файл зашифрованного текста и ключа предварительно перемешайте записываемые массивы (в получаемом массиве выделяются фиксированные позиции для хранения символов ключа; для корректной сборки ключа необходимо указать длину ключа в символах и шаг фиксированных позиций, т.е. через сколько символов шифрованного текста находятся символы ключа; указанные признаки можно записать в качестве первых двух байтов файла или же в других позициях файла).

Пример:
1) Перемешать строки.
Входные переменные:
text = "abcd"
key = "12"
step = 2

Выходные переменные:
result = "1ab2cd"


2) Теперь мне нужно привести перемешанную строку к исходным данным, где заранее известна длина ключа и шаг.
Входные переменные:
result = "1ab2cd"
key.Length = 2
step = 2

Выходные переменные:
text = "abcd"
key = "12"


Алгоритм по перемешиванию строки (1) уже реализован:
using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Input
    {
        class Program
        {
            static void Main(string[] args)
            {
                int step, word;
                string text, key, result = string.Empty;
    
                Console.Write("Enter Text : ");
                text = Console.ReadLine();
                Console.Write("Enter Key : ");
                key = Console.ReadLine();
                Console.Write("Enter Step : ");
                step = int.Parse(Console.ReadLine());
    
                // MIX STRING
                word = 0;
    
                if (step <= text.Length)
                {
                    for (int i = 0; i < key.Length; i++)
                    {
                        result += key.Substring(i, 1);
                        for (int k = 0; k < step; k++)
                        {
                            try
                            {
                                result += text.Substring(word, 1);
                                word++;
                            }
                            catch
                            {
                                break;
                            }
                        }
                    }
    
                    if (word < text.Length)
                    {
                        result += text.Substring(word, (text.Length - word));
                    }
                }
    
                Console.WriteLine("Result Text : " + result);
    
                // DECIPHER STRING

                Console.WriteLine("text: " + text);
                Console.WriteLine("key: " + key);
    
                Console.ReadKey();
            }
        }
    }


Проблема в том, что я не могу заставить алгоритм работать в обратную сторону.
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimkss
@dimkss
1. Выше "Свободу алгоритмам" правильно сказали. Это задача для freelance а не toster.
2. Алгоритм странный. А что будет если:
text = "abcd"
key = "123456789"
step = 2

3. Первый символ всегда ключ. Вырезаем его и добавляем в key. Отсчитываем step символов, добавляем их в text. Следующий символ - ключ, добавляем в key. И так далее.
И на каждом-каждом этапе проверяем длинну result. Есть ли там ключ, есть ли там символы для text и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы