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

21 Авг 2019 в 06:23
293 +1
0
Ответы
1

Для дешифровки строки необходимо реализовать обратный алгоритм от перемешивания строки к исходным данным. В вашем случае, для дешифровки строки 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 с заданными параметрами длины ключа и шага.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир