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