Поиск по этому блогу

вторник, 15 мая 2012 г.

Шифр Цезаря

Вот решил на C# написать самостоятельно реализацию шифра Цезаря. Ничего сверхъестественного или сложного не пытался написать. Поэтому реализация получилась очень простой.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.
Пока заставил программу только шифровать, похже добавлю дишифровку.

            Console.WriteLine("Введите слово,которое нужно зашифровать:");
            string s = Console.ReadLine();
            string abc = "abcdefghijklmnopqrstuvwxyz";
            //abc наш алфавит
            Console.WriteLine("Укажите длину сдвига");
            int len = Convert.ToInt32(Console.ReadLine());
            // len  - число сдвигов в сторону
            int a;
            string code = string.Empty;
            for (int i = 0; i < s.Length; i++)
            {
                a = i + len;
                code += abc[a];
            }
            Console.WriteLine(code);
            Console.ReadLine();

4 комментария:

  1. Не работает. Точнее работает, но не правильно. Любое слово шифрует одинаково при одинаковом значении сдвига.

    ОтветитьУдалить
  2. namespace Shifr
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.WriteLine("Введите слово,которое нужно зашифровать:");
    string s = Console.ReadLine();
    string abc = "abcdefghijklmnopqrstuvwxyz";
    //abc наш алфавит
    Console.WriteLine("Укажите длину сдвига");
    int len = Convert.ToInt32(Console.ReadLine());
    // len - число сдвигов в сторону
    int a;
    string code = string.Empty;
    for(int i =0; i<s.Length;i++)
    {
    int pos;
    char c = s[i];
    pos = abc.IndexOf(c);
    a = pos + len;
    code += abc[a];
    }
    Console.WriteLine(code);
    Console.ReadLine();
    }
    }
    Так будет работать.

    ОтветитьУдалить
  3. При вводе слова "Информация" выдается ошибка на последнюю букву "Я" в алфавите, поэтому перед строчкой code += abc[a]; добавьте строчку if (a > 32) a -= 33; Тогда программа будет правильно работать)))

    ОтветитьУдалить
  4. Полный код программы:
    namespace Шифр_Цезаря
    {
    class Program
    {
    static void Main(string[] args)
    {
    Console.WriteLine("Введите слово,которое нужно зашифровать:");
    string s = Console.ReadLine();
    string abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    //abc наш алфавит
    Console.WriteLine("Укажите длину сдвига");
    int len = Convert.ToInt32(Console.ReadLine());
    //len - число сдвигов в сторону
    int a;
    string code = string.Empty;
    for (int i = 0; i < s.Length; i++)
    {
    int pos;
    char c = s[i];
    pos = abc.IndexOf(c);
    a = pos + len;
    if (a > 32) a -= 33;
    code += abc[a];
    }
    Console.WriteLine(code);
    Console.ReadLine();
    }
    }
    }

    ОтветитьУдалить