Задание
Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Естественным развитием шифра Цезаря стал шифр Виженера. С точки зрения современного криптоанализа, шифр Цезаря не имеет приемлемой стойкости.
Функционал программы
- Шифрование строки
- Дешифрование строки
- Автоматическое определение языка строки (Английский,Русский)
Фрагмент программного кода
public partial class MainWindowViewModel { private const string AlphabetEn = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private const string AlphabetRu = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; [ObservableProperty] private Language language = Language.Russian; [ObservableProperty] private string? text; [ObservableProperty] public int key = 1; [ObservableProperty] public int maxKeyValue = AlphabetRu.Length; [ObservableProperty] private string? result; [ObservableProperty] private bool method = true; partial void OnTextChanged(string? value) { if (!Regex.IsMatch(value, @"\P{IsBasicLatin}") && !char.IsNumber(value[value.Length-1]) && !char.IsWhiteSpace(value[value.Length - 1])) { Language = Language.English; } else if (!Regex.IsMatch(value, @"\P{IsCyrillic}") && !char.IsNumber(value[value.Length - 1]) && !char.IsWhiteSpace(value[value.Length - 1])) { Language = Language.Russian; } MaxKeyValue = Language == Language.English ? AlphabetEn.Length : AlphabetRu.Length; if(MaxKeyValue < Key) { Key = MaxKeyValue; } if(value != null && value.Length > 0 && Key > 0) { CryptData(); } } partial void OnKeyChanged(int value) { if (Text != null && Text.Length > 0 && value > 0) { CryptData(); } } partial void OnMethodChanged(bool value) { if (Text != null && Text.Length > 0 && Key > 0) { CryptData(); } } private void CryptData() { StringBuilder sb = new StringBuilder(); var alphabet = Language == Language.English ? AlphabetEn : AlphabetRu; foreach (var c in Text) { var index = alphabet.IndexOf(char.ToUpper(c)); if(index < 0) { sb.Append(c); } else { sb.Append(alphabet[(alphabet.Length + index + (Method == true ? Key : -Key)) % alphabet.Length]); } } Result = sb.ToString(); } }
Скриншот архива с проектом
Содержание архива
- исходный код программы
FootballLife