Шифрование/дешифрование решеткой (метод Кардано) - C#
Формулировка задачи:
Подскажите пожалуйста, как сделать обратное действие (DeCrypt), расшифровать, т.е. собрать все 1 и выложить их в строку, должно получится слово привет!
Это шифр Кардано, шифрование происходит за счет замены нужных букв(word) в "невинном тексте"(input). Нужные буквы 1, остальные 0. Берем первое вхождение строки word и пробегаемся по строке input до первого вхождения нужного элемента.
static void Main(string[] args)
{
string word = "привет";
string input = "ПеРгамент клеопатры Из египта отраВлЕн Токсином!";
Console.WriteLine("Шифруемое слово: " + word + "\n");
Console.WriteLine("Криптограмма: " + input + "\n");
input = input.ToLower();
word = word.ToLower();
Console.WriteLine("Ключ криптограммы: " + Crypt(word,input));
Console.ReadLine();
}
static string Crypt(string word, string input)
{
var sb = new StringBuilder();
int i = 0, j = 0;
for (; i < word.Length; i++)
{
for (; j < input.Length; j++)
{
if (word[i] == input[j])
{
sb.Append("1");
j++;
break;
}
sb.Append("0");
}
}
for (; j < input.Length; j++)
sb.Append("0");
return sb.ToString();
}
public static void DeCrypt()
{
// прямой обход решетки
for (int i = 0; i < строка.Length; i++)
{
if (Convert.ToString(строка[i]) == "1")
{
Console.Write(строка[i]);
}
}
Console.WriteLine("");
}Решение задачи: «Шифрование/дешифрование решеткой (метод Кардано)»
textual
Листинг программы
static void DeCrypt(string input, string key)
{
for (int i = 0; i < key.Length; i++)
{
if (Convert.ToString(key[i]) == "1")
{
Console.Write(input[i]);
}
}
}