Это шифр playfair, ключевое слово GOLDEN, однако мой алгоритм не может его определить. Он использует частоты тетраграмм для фитнеса. Я предполагаю, что проблема связана с запасом или просто в том, что я использую слишком примитивный код для такой задачи, в любом случае мне нужен способ сделать это.
using System;
using System.IO;
using System.Linq;
namespace keyword_solute
{
class Program
{
static void Main()
{
string path = @"C:\Users\asus\Downloads\english_quadgrams.txt\english_quadgrams.txt";
string[] English_tetragrams = File.ReadAllLines(path);
long[] Eng_tetragram_frequencies = new long[English_tetragrams.Length];
int iteration = 0;
foreach (string line in English_tetragrams)
{
Eng_tetragram_frequencies[iteration] = Convert.ToInt64(line.Remove(0, 5));
English_tetragrams[iteration] = line.Remove(line.IndexOf(' '));
iteration++;
}
long total_engl_frequency = Eng_tetragram_frequencies.Sum();
string Cipher = "EGIWLUQDUOHGKODGRIKTAWTWRDUSERKBDZERNOIRACQUIOIWAHHN";
char[] alphabet = new char []{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
int[,] alphabet_pos = new int[25, 2];
char[,] ParentKey = new char[,] { { 'A', 'B', 'C', 'D', 'E' }, { 'F', 'G', 'H', 'I', 'K' }, { 'L', 'M', 'N', 'O', 'P' }, { 'Q', 'R', 'S', 'T', 'U' }, { 'V', 'W', 'X', 'Y', 'Z' } };
char[,] ChildKey = new char[5, 5];
double BestFitness = fitness_score(Totetragrams(solution(Cipher, ParentKey)), English_tetragrams, Eng_tetragram_frequencies, total_engl_frequency);
Random random = new Random();
double margin = 0.0005D * BestFitness * -1;
int successful= 0;
for (int counter = 0; counter < 30001;)
{
int trow=0;
int tcolumn =0;
foreach(char letter in ParentKey)
{
alphabet_pos[Array.IndexOf(alphabet, letter), 0] = trow;
alphabet_pos[Array.IndexOf(alphabet, letter), 1] = tcolumn;
tcolumn++;
if (tcolumn == 5)
{
trow++;
tcolumn = 0;
}
}
switch(random.Next(6))
{
case 0:
int index_1 = random.Next(25);
int index_2 = random.Next(25);
int[] index_2_pos = new int[] { alphabet_pos[index_2, 0], alphabet_pos[index_2, 1] };
alphabet_pos[index_2, 0] = alphabet_pos[index_1, 0];
alphabet_pos[index_2, 1] = alphabet_pos[index_1, 1];
alphabet_pos[index_1, 0] = index_2_pos[0];
alphabet_pos[index_1, 1] = index_2_pos[1];
break;
case 1:
int row_index_1 = random.Next(5);
int row_index_2 = random.Next(5);
int[] row_of_index_2 = new int[5];
for (int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 0] == row_index_2)
{
row_of_index_2[alphabet_pos[i, 1]] = i;
}
}
for(int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 0] == row_index_1)
{
alphabet_pos[i, 0] = row_index_2;
}
}
foreach(int letter in row_of_index_2)
{
alphabet_pos[letter, 0] = row_index_1;
}
break;
case 2:
int column_index_1 = random.Next(5);
int column_index_2 = random.Next(5);
int[] column_of_index_2 = new int[5];
for (int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 1] == column_index_2)
{
column_of_index_2[alphabet_pos[i, 0]] = i;
}
}
for(int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 1] == column_index_1)
{
alphabet_pos[i, 1] = column_index_2;
}
}
foreach(int letter in column_of_index_2)
{
alphabet_pos[letter, 1] = column_index_1;
}
break;
case 3:
for(int i =0;i
Подробнее здесь: https://stackoverflow.com/questions/798 ... r-cipher-c
Пожалуйста, помогите мне с шифром Playfair (C#) ⇐ C#
Место общения программистов C#
-
Anonymous
1766017905
Anonymous
Это шифр playfair, ключевое слово GOLDEN, однако мой алгоритм не может его определить. Он использует частоты тетраграмм для фитнеса. Я предполагаю, что проблема связана с запасом или просто в том, что я использую слишком примитивный код для такой задачи, в любом случае мне нужен способ сделать это.
using System;
using System.IO;
using System.Linq;
namespace keyword_solute
{
class Program
{
static void Main()
{
string path = @"C:\Users\asus\Downloads\english_quadgrams.txt\english_quadgrams.txt";
string[] English_tetragrams = File.ReadAllLines(path);
long[] Eng_tetragram_frequencies = new long[English_tetragrams.Length];
int iteration = 0;
foreach (string line in English_tetragrams)
{
Eng_tetragram_frequencies[iteration] = Convert.ToInt64(line.Remove(0, 5));
English_tetragrams[iteration] = line.Remove(line.IndexOf(' '));
iteration++;
}
long total_engl_frequency = Eng_tetragram_frequencies.Sum();
string Cipher = "EGIWLUQDUOHGKODGRIKTAWTWRDUSERKBDZERNOIRACQUIOIWAHHN";
char[] alphabet = new char []{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
int[,] alphabet_pos = new int[25, 2];
char[,] ParentKey = new char[,] { { 'A', 'B', 'C', 'D', 'E' }, { 'F', 'G', 'H', 'I', 'K' }, { 'L', 'M', 'N', 'O', 'P' }, { 'Q', 'R', 'S', 'T', 'U' }, { 'V', 'W', 'X', 'Y', 'Z' } };
char[,] ChildKey = new char[5, 5];
double BestFitness = fitness_score(Totetragrams(solution(Cipher, ParentKey)), English_tetragrams, Eng_tetragram_frequencies, total_engl_frequency);
Random random = new Random();
double margin = 0.0005D * BestFitness * -1;
int successful= 0;
for (int counter = 0; counter < 30001;)
{
int trow=0;
int tcolumn =0;
foreach(char letter in ParentKey)
{
alphabet_pos[Array.IndexOf(alphabet, letter), 0] = trow;
alphabet_pos[Array.IndexOf(alphabet, letter), 1] = tcolumn;
tcolumn++;
if (tcolumn == 5)
{
trow++;
tcolumn = 0;
}
}
switch(random.Next(6))
{
case 0:
int index_1 = random.Next(25);
int index_2 = random.Next(25);
int[] index_2_pos = new int[] { alphabet_pos[index_2, 0], alphabet_pos[index_2, 1] };
alphabet_pos[index_2, 0] = alphabet_pos[index_1, 0];
alphabet_pos[index_2, 1] = alphabet_pos[index_1, 1];
alphabet_pos[index_1, 0] = index_2_pos[0];
alphabet_pos[index_1, 1] = index_2_pos[1];
break;
case 1:
int row_index_1 = random.Next(5);
int row_index_2 = random.Next(5);
int[] row_of_index_2 = new int[5];
for (int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 0] == row_index_2)
{
row_of_index_2[alphabet_pos[i, 1]] = i;
}
}
for(int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 0] == row_index_1)
{
alphabet_pos[i, 0] = row_index_2;
}
}
foreach(int letter in row_of_index_2)
{
alphabet_pos[letter, 0] = row_index_1;
}
break;
case 2:
int column_index_1 = random.Next(5);
int column_index_2 = random.Next(5);
int[] column_of_index_2 = new int[5];
for (int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 1] == column_index_2)
{
column_of_index_2[alphabet_pos[i, 0]] = i;
}
}
for(int i = 0; i < 25; i++)
{
if (alphabet_pos[i, 1] == column_index_1)
{
alphabet_pos[i, 1] = column_index_2;
}
}
foreach(int letter in column_of_index_2)
{
alphabet_pos[letter, 1] = column_index_1;
}
break;
case 3:
for(int i =0;i
Подробнее здесь: [url]https://stackoverflow.com/questions/79849917/please-help-me-with-playfair-cipher-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия