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