Доработка шифра Цезаря - C#
Формулировка задачи:
помогите разобраться и дописать прогу немного непойму.
1. Как дописать в form1 чтоб было шифрование и дешифрирование текста из стоки texBox1 в texBox2.(Ошибка в коде де шифрования)
2.Как можно дописать чтоб не только английские буквы были и цифры но еще и русские.
Вот код шифрования:
Код де шифрования:
Помогите пожалуйста.
{
n = str1.Length;
//textBox1.Text = "";
textBox2.Text = "";
for (int i = 0; i < n; i++)
{
k = (int)str1[i];
k = k + index;
if (k > 122) k = k - 26;
textBox2.Text = textBox2.Text + ((char)(k)).ToString();
}
}private void button2_Click(object sender, EventArgs e)
{
int k, n, index;
string str1;
str1 = textBox1.Text;
if (textBox3.Text != "")
{
index = Convert.ToInt32(textBox3.Text);
if (index < 26 & index > 0)
{
n = str1.Length;
//textBox2.Text = "";
textBox2.Text = "";
for (int i = 0; i < n; i++)
{
k = (int)str1[i];
k = k - index;
if (k < 97) k = k + 26;
textBox2.Text = textBox2.Text + ((char)(k)).ToString();
}
}
}
}Решение задачи: «Доработка шифра Цезаря»
textual
Листинг программы
// Функция возвращает A по модулю B
// например:
// Mod(3,5) = 3
// Mod(5,5) = 0
// Mod(6,5) = 1
// Mod (-1, 5) = 4 <- Обычная конструкция a%b не работает с отрицательными числами
//
// Нужна чтобы циклично сдвигать массив при шифровании
private int Mod(int a, int b)
{
return (Math.Abs(a * b) + a) % b;
}
private string ShiftString(string Text, int Size = 1)
{
var sb = new StringBuilder(); // StringBuilder это почти обычный string, только быстрее
foreach (char c in Text) // перебираем все символы в строке Text
{
int index = Charset.IndexOf(c); // Находим порядковый номер этого символа в алфавите (нашем)
sb.Append(index == -1 ? // Если -1 значит символа нет в алфавите
c : // тогда мы его просто в строку копируем не изменяя
Charset[Mod(index + Size, Charset.Length)]); // а если нашли, то добавим к номеру смещение Size
// Возьмем по модулю "Длина_алфавита" ('Я'+1 -> 'A')
// и поместим в новую строку символ алфавита по этому новому номеру (индексу)
}
return sb.ToString(); // ну и вернем обычную строку из "быстрой строки" (StringBuilder)
}