Задание
Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Естественным развитием шифра Цезаря стал шифр Виженера. С точки зрения современного криптоанализа, шифр Цезаря не имеет приемлемой стойкости.
Функционал программы
- Шифрование строки
- Дешифрование строки
- Автоматическое определение языка строки (Английский,Русский)
Фрагмент программного кода
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();
}
}
Скриншот архива с проектом

Содержание архива
- исходный код программы
Телеграм
-