Вот решил на C# написать самостоятельно реализацию шифра Цезаря. Ничего сверхъестественного или сложного не пытался написать. Поэтому реализация получилась очень простой.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3, А была бы заменена на Г, Б станет Д, и так далее.
Пока заставил программу только шифровать, похже добавлю дишифровку.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. Например, в шифре со сдвигом 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();
Не работает. Точнее работает, но не правильно. Любое слово шифрует одинаково при одинаковом значении сдвига.
ОтветитьУдалить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();
}
}
Так будет работать.
При вводе слова "Информация" выдается ошибка на последнюю букву "Я" в алфавите, поэтому перед строчкой code += abc[a]; добавьте строчку if (a > 32) a -= 33; Тогда программа будет правильно работать)))
ОтветитьУдалитьПолный код программы:
ОтветитьУдалить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();
}
}
}