В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
никусь2222
никусь2222
18.06.2022 12:53 •  Информатика

НА ПАСКАЛЕ ИЛИ НА C# Известно, что текст на русском языке зашифрован шифром Цезаря. При этом использован следующий набор букв:

А б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ ь ы ъ э ю я

В исходном тексте буква Й заменяется буквой И.

Нужно расшифровать заданный текст методом прямого перебора возможных вариантов. Смещение неизвестно, поэтому для расшифровки нужно составить варианты текста со всеми параметрами сдвига. Это значит, что первый вариант текста будет со сдвигом букв на 1, второй – со сдвигом букв на 2, и т.д. Вариант, который даст осмысленный исходный текст, и является искомым.

Текст для расшифровки:

Показать ответ
Ответ:
kristinacelidze167
kristinacelidze167
11.03.2021 14:35

// C# 7.3

using System;

using System.Collections.Generic;

using System.Collections;

using System.Text;

namespace Rextester

{

   public class Program

   {

       public static void Main(string[] args)

       {

           var crypted = "";

 

           for (int i = 0; i < CaesarCipher.Ru.Length; i++)

               Console.WriteLine(CaesarCipher.Decode(i, crypted));

       }

   }

   

   class CaesarCipher

   {

       public static readonly string Ru = "";

       public static readonly string RuD = "";

       private static readonly int defaultStep = 3;

       public static CaesarEncrypted Encode(int step, string source, Func<string, string> translate)

       {

           string translatedData = translate(source);

           var stringBuilder = new StringBuilder();

           foreach (char c in translatedData.ToLower())

           {

               stringBuilder.Append(RuD[Ru.IndexOf(c) + step]);

           }

           return new CaesarEncrypted(step, stringBuilder.ToString());

       }

       public static CaesarEncrypted Encode(int step, string source)

       {

           return Encode(step, source, x => x);

       }

       public static string Decode(CaesarEncrypted source)

       {

           var step = source.Step;

           return Encode(-step + Ru.Length, source.ToString(), x => x);

       }

       public static string Decode(int step, string source)

       {

           return Encode(-step + Ru.Length, source, x => x);

       }

   }

   class CaesarEncrypted : IEnumerable, IEnumerable<char>

   {

       public int Step { get; set; }

       public string Data { get; set; }

       public CaesarEncrypted(int step, string initData)

       {

           Step = step;

           Data = initData;

       }

       public CaesarEncrypted(string initData) : this(int.MaxValue, initData)

       {}

       public IEnumerator<char> GetEnumerator()

       {

           foreach (char c in Data)

               yield return c;

       }

       IEnumerator IEnumerable.GetEnumerator() => (IEnumerator<char>)GetEnumerator();

       public override string ToString() => Data;

       public static implicit operator string(CaesarEncrypted source) => source.ToString();

   }

}

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота