Шифр Виженера: неверный результат шифрования символов - C#

Узнай цену своей работы

Формулировка задачи:

 private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов
        private static int alphLength = 26;
        public static string Encrypt(String text, String key)
        {
            StringBuilder ans = new StringBuilder();
            for (int i = 0; i < text.Length; i++)
            {
                int num = (text[i] + key[i % key.Length] - 2 * smesh) % alphLength;
                //в num лежит номер буквы в алфавите
                char simvol = (char)(num + smesh);//получаем нужный символ
                ans.Append(simvol);
            }
            return ans.ToString();
        }
        public static string Decrypt(String res, String key)
        {
            StringBuilder ans = new StringBuilder();
            for (int i = 0; i < res.Length; i++)
            {
                int num = (res[i] - key[i % key.Length] + alphLength) % alphLength;
                //обратные преобразования с номером буквы в алфавите
                char c = (char)(num + smesh);
                ans.Append(c);
            }
            return ans.ToString();
        }
Есть две функции Encrypt и Decrypt отвечающие за шифрование, расшифрование по таблице Виженера. Слова английского алфавита она шифрует отлично, но с символами проблема. Собственно сам вопрос: как сделать, что-бы если в тексте есть символ (_,^,/,[], и тд), независимо какой символ в ключе, в результате он выводил символ текста без изменения

Решение задачи: «Шифр Виженера: неверный результат шифрования символов»

textual
Листинг программы
 {
        private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов
        private static int alphLength = 26;
        static char[] ExceptSymbols = { 'a', 'b', 'c', 'd', 'e' }; //  и такк все буквы
        public static string Encrypt(String text, String key)
        {
            StringBuilder ans = new StringBuilder();
            for (int i = 0; i < text.Length; i++)
            {
                if (!ExceptSymbols.Contains(text[i]))
                {
                    ans.Append(text[i]);
                }
                else
                {
                    int num = (text[i] + key[i % key.Length] - 2 * smesh) % alphLength;
                    //в num лежит номер буквы в алфавите
                    char simvol = (char)(num + smesh);//получаем нужный символ
                    ans.Append(simvol);
                }
            }
            return ans.ToString();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы