Как дешифровать объедененные строки? Задача: Зашифрованный текст должен храниться в файле текстового формата вместе с ключом. Перед записью в файл зашифрованного текста и ключа предварительно перемешайте записываемые массивы (в получаемом массиве выделяются фиксированные позиции для хранения символов ключа; для корректной сборки ключа необходимо указать длину ключа в символах и шаг фиксированных позиций, т.е. через сколько символов шифрованного текста находятся символы ключа; указанные признаки можно записать в качестве первых двух байтов файла или же в других позициях файла).Пример: 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;
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)); } }
Для дешифровки строки необходимо реализовать обратный алгоритм от перемешивания строки к исходным данным. В вашем случае, для дешифровки строки result обратно к исходным данным text и key, можно использовать следующий код:
int step, keyLength; string result, text = string.Empty, key = string.Empty; Console.Write("Enter Result Text : "); result = Console.ReadLine(); Console.Write("Enter Key Length : "); keyLength = int.Parse(Console.ReadLine()); Console.Write("Enter Step : "); step = int.Parse(Console.ReadLine()); // DECIPHER STRING int keyIndex = 0; int textIndex = keyLength; while (textIndex < result.Length) { key += result.Substring(keyIndex, 1); text += result.Substring(keyLength, step); keyIndex++; textIndex += step; } Console.WriteLine("Deciphered Text : " + text); Console.WriteLine("Deciphered Key : " + key); Console.ReadKey();
Этот код должен успешно дешифровать строку result обратно к исходным данным text и key с заданными параметрами длины ключа и шага.
Для дешифровки строки необходимо реализовать обратный алгоритм от перемешивания строки к исходным данным. В вашем случае, для дешифровки строки result обратно к исходным данным text и key, можно использовать следующий код:
int step, keyLength;string result, text = string.Empty, key = string.Empty;
Console.Write("Enter Result Text : ");
result = Console.ReadLine();
Console.Write("Enter Key Length : ");
keyLength = int.Parse(Console.ReadLine());
Console.Write("Enter Step : ");
step = int.Parse(Console.ReadLine());
// DECIPHER STRING
int keyIndex = 0;
int textIndex = keyLength;
while (textIndex < result.Length)
{
key += result.Substring(keyIndex, 1);
text += result.Substring(keyLength, step);
keyIndex++;
textIndex += step;
}
Console.WriteLine("Deciphered Text : " + text);
Console.WriteLine("Deciphered Key : " + key);
Console.ReadKey();
Этот код должен успешно дешифровать строку result обратно к исходным данным text и key с заданными параметрами длины ключа и шага.