Шифр Гронсфельда - C#

Узнай цену своей работы

Формулировка задачи:

Каждый символ сообщения сдвигается на k ключ того же алфавита. Например,сообщение "абвгд" при ключе k=2 будет "вгдеё". Теперь нужно сделать, чтобы символы сдвигались на соответствующую цифру ключа, например пусть k=2718 тогда сообщение "ВОСТОЧНЫЙЭКСПРЕСС" зашифруется как: "ДХТЬРЮОГЛДЛЩСЧЖЩУ".то есть буква В сдвинется на 2 символа, буква О на 7 символов, буква С на 1, буква Т на 8 и т.д. Как это сделать?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Гронсфельд
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            textBox3.Text = "";
            int key = 0;
            string[] array = new string[] { "а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я" };
 
            try
            {
                key = Convert.ToInt32(textBox1.Text);
            }
 
            catch
            {
                MessageBox.Show("Установите шаг шифрования!");
                return;
            }
 
            string[] array2;
            array2 = array.Skip(key).Concat(array.Take(key)).ToArray();
 
            //Данная функция смещает по кругу ячейки массива. Для расшифровки меняет ключ на противоположный знак
            foreach (string element in array2)
            {
 
            }
 
            string text = textBox2.Text;
            foreach (char bykva in text)
            {
                for (int i = 0; i < array.Length; i++)
                {
                    if (bykva.ToString().ToLower() == array[i])
                    {
                        textBox3.Text += array2[i];
                        break;
                    }
                    else
                    {// эти знаки печатаются без зашифровки
                        if (bykva.ToString() == " " || bykva.ToString() == "." ||
                        bykva.ToString() == "," || bykva.ToString() == ":" ||
                        bykva.ToString() == ";" || bykva.ToString() == "?" ||
                        bykva.ToString() == "!")
                        {
                            textBox3.Text += " ";
                            break;
                        }
                    }
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
    }
}

Решение задачи: «Шифр Гронсфельда»

textual
Листинг программы
using System;
using System.Linq;
using System.Text;
 
class Program
{
    public static void Main()
    {
        string alphabet = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
        int[] keys = "2718".Select(ch => (int)Char.GetNumericValue(ch)).ToArray();
        string s = "ВОСТОЧНЫЙЭКСПРЕСС";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.Length; i++)
        {
            sb.Append(alphabet[(alphabet.IndexOf(s[i]) + keys[i % keys.Length]) % alphabet.Length]);
        }
        Console.WriteLine(sb);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5