Криптоанализ шифра Цезаря - C#
Формулировка задачи:
Вообщем суть заключается в том,что у нас есть зашифрованный текст Цезарем с любым шагом.Нужно сделать частотный анализ текста (найти самые часто встречающиеся символы), отсортировать их по убыванию.Далее заменяем эти символы на популярные символы в русском алфавите.Попробовал сделать так же,не расшифровывает получается дичь.
Быдло код...подскажите что нибудь.
string text1 = textBox1.Text;
string text = text1.ToLower();
char[] alph = new char[] { ' ', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'x', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
float[] another = new float[alph.Length];
float[] veroyatn = new float[alph.Length];
char[] alphh = text.ToCharArray();
for (int i = 0; i < alph.Length; i++)
{
for (int n = 0; n < alphh.Length; n++)
{
if (alph[i] == alphh[n])
another[i]++;
}
if (another[i] > 0)
{
veroyatn[i] = another[i];
veroyatn[i] = veroyatn[i] / text.Length;
}
}
for (int q = 0; q < alph.Length; q++)
{
for (int w = 0; w < alph.Length; w++)
{
float pluhhhya = 0;
char tmmmppp;
if (veroyatn[w] < veroyatn[q])
{
tmmmppp = alph[q];
pluhhhya = veroyatn[q];
alph[q] = alph[w];
veroyatn[q] = veroyatn[w];
alph[w] = tmmmppp;
veroyatn[w] = pluhhhya;
}
}
}
for (int i = 0; i < alph.Length; i++)
{
if (veroyatn[i] == 0)
{
continue;
}
else
{
if (alph[i] == ' ')
{
this.listBox1.Items.Add("Пробел = " + veroyatn[i] + ";\n ");
}
else
{
this.listBox1.Items.Add(alph[i] + " = " + veroyatn[i] + ";\n ");
}
}
}
char[] chast = new char[] { ' ', 'о', 'а', 'е', 'и', 'н', 'э', 'р', 'с', 'л', 'в', 'к', 'п', 'м', 'у', 'д', 'я', 'ы', 'ь', 'з', 'б', 'г', 'й', 'ч', 'ю', 'х', 'ж', 'ш', 'ц', 'щ', 'ф', 'э', 'ъ' };
for (int y = 0; y < alphh.Length; y++)
{
for (int h = 0; h < chast.Length; h++)
if (alphh[y] == '.')
{
textBox2.Text += ".";
break;
}
else if (alphh[y] == ',')
{
textBox2.Text += ",";
break;
}
else if (alphh[y] == '-')
{
textBox2.Text += "-";
break;
}
else if (alphh[y] == '?')
{
textBox2.Text += "?";
break;
}
else if (alphh[y] == '!')
{
textBox2.Text += "!";
break;
}
else if (alphh[y] == '»')
{
textBox2.Text += "»";
break;
}
else if (alphh[y] == '«')
{
textBox2.Text += "«";
break;
}
else if (alphh[y] == '_')
{
textBox2.Text += "_";
break;
}
else if (alphh[y] == alph[h])
{
textBox2.Text += chast[h];
break;
}
}
}Решение задачи: «Криптоанализ шифра Цезаря»
textual
Листинг программы
CaesarCipher.Alph = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя ";
string crypt = CaesarCipher.Encryption(text);
for (int i = 1; i <= CaesarCipher.Alph.Length; i++)
Console.WriteLine("i = {0}{2}{1}{2}", i, CaesarCipher.Decryption(crypt, i), Environment.NewLine);