Реализация квадрата Виженера
Помогите пожалуйста в реализации квадрата Виженера.
Суть такова, что в таблице берется 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; // вывод результата
Источник: Stack Overflow на русском