Реализация квадрата Виженера

Рейтинг: 1Ответов: 0Опубликовано: 09.12.2014

Помогите пожалуйста в реализации квадрата Виженера.

Суть такова, что в таблице берется 1 буква с исходного текста (по горизонтали) и 1 буква с ключа (по вертикале) и та буква, что будет на их пересечении записывается в шифротекст.

У меня же получается что-то непонятное, и y постоянно равен 0.

        string msg, abc, key, enmsg;
        int n = 31; // количество символов в таблице
        char [,] tabl = new char[n,n];
        msg = Convert.ToString(textBox1.Text);  // получение сообщения
        key = Convert.ToString(textBox2.Text);  // получение ключа  
        abc = "абвгдежзиклмнопрстуфхцчшщъыьэюя";  // русский алфавит
        enmsg = Convert.ToString("0");
        // формирование таблицы
        for (int i = 0; i < n; i++)
        {
            if (i == 0)
            {
                for (int j = 0; j < n; j++)
                {
                    tabl[i, j] = abc[j];
                }
            }
            else
            {
                for (int j = i; j < n; j++)
                {
                    tabl[i, j] = abc[j];
                }
                for (int j = 0; j < i; j++)
                {
                    tabl[i, j] = abc[j];
                }
            }
        }

        int msgLen = Convert.ToInt32(msg.Length);   // длина сообщения
        int keyLen = Convert.ToInt32(key.Length);   // длина ключа

        int p = 0, t = 0, x = 0, y = 0;

        for (int i = 0; i < msgLen; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (msg[i] == tabl[0, j])
                {
                    x = j;
                }
            }
            for (int j = 0; j < n; j++)
            {
                if (key[p] == tabl[j, 0])
                {
                    y = j;
                }
            }
            if (i == 0)
            {
                enmsg = Convert.ToString(tabl[x, y]);
            }
            else
            {
                enmsg = enmsg + Convert.ToString(tabl[x, y]);
            }

            p++;
            if (p >= keyLen) p = 0;
        }
        textBox3.Text = enmsg;    // вывод результата

Ответы

Ответов пока нет.