1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200

Метод шифрования Уитстона "Двойной квадрат"

10.06.2016, 02:49. Показов 8880. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код шифрования у меня реализован, проблема в том, что я не знаю как сделать так, чтобы при выборе RadioButton1 "Русский текст" в StringGrid1 и StringGrid2 выводились рандомно символы, без повторений от а до я и знаки ("," " " ":" "."), а при выборе RadioButton2 "Английский текст" было тоже самое, что и в первом случае, только от a до z и символы ("," " " ":" "." "?" "-" """ "(" ")"). Это всё происходит при выборе RadioButton и нажатие на кнопку "Заполнить таблицы". Что было понятнее скрин программы ниже:
Миниатюры
Метод шифрования Уитстона "Двойной квадрат"  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2016, 02:49
Ответы с готовыми решениями:

Написать программу для шифрования (шифры Плейфера, «двойной квадрат» Уитстона, Вернама)
Помогите сделать задачу, нужно написать программу для шифрования данных используя один из потоковых криптографических алгоритмов (шифры...

Метод шифрования Уинстона (двойной квадрат)
Необходимо на Java реализовать шифрование и дешифрование текста двойным квадратом Уинстона. Алгоритм:...

метод шифрования Уистона(двойной квадрат)
Необходимо на Javascripte реализовать шифрование текста двойным квадратом Уистона.Алгоритм здесь...

26
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
22.06.2016, 02:41
Студворк — интернет-сервис помощи студентам
11-13 строки - генерация последовательности символов.
15-16 - заполнение таблицы.
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
22.06.2016, 06:57  [ТС]
т.е. для второй таблицы нужно будет описывать новые переменные?
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
22.06.2016, 11:14
Для выбора языка используй RadioGroup.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  String alph = "абвгдежзиклмнопрстуфхцчшщъыьэюя, :.", test = "", test2 = "";
  if (RadioGroup1->ItemIndex == 1)
    alph = "abcdefghijklmnopqrstuvwxyz.,: ?-\"()";
  const n = 35;  // количество cимволов в alph
  const k = 5;  // количество столбцов в таблице
  randomize();
  int arr[n], arr2[n], i;
  for (i = 0; i < n; i++)
  {
    arr[i] = i + 1;
    arr2[i] = i + 1;
  }
  std::random_shuffle(arr, arr + n);
  std::random_shuffle(arr2, arr2 + n);
  for (i = 0; i < n; i++)
  {
    test += alph[arr[i]];
    test2 += alph[arr2[i]];
  }
 
  for (i = 0; i < n; i++)
  {
    StringGrid1->Cells[i%k][i/k] = test[i+1];
    StringGrid2->Cells[i%k][i/k] = test2[i+1];
  }
Миниатюры
Метод шифрования Уитстона "Двойной квадрат"   Метод шифрования Уитстона "Двойной квадрат"  
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
23.06.2016, 09:19  [ТС]
Я с RadioButton как-то уже разобрался...
А что делать с кодом который находится в самой форме, т.е. он прописан в "Unit5.h"?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Выполняет преобразование
AnsiString __fastcall TfmMain::work( AnsiString aString ){
    // Базовая таблица
   const char BaseTable[7][5] = {
      { 'а', 'б', 'в', 'г','д'  },
      { 'е', 'ж', 'з', 'и', 'к' },
      { 'л', 'м', 'н', 'о', 'п' },
      { 'р', 'с', 'т', 'у', 'ф' },
      { 'х', 'ц', 'ч', 'ш', 'щ' },
      { 'ъ', 'ы', 'ь', 'э', 'ю' },
      { 'я', '.', ',', ':', ' ' }
   };
 
    // Степень перемешивания, с которой сформируются исходные таблицы
   const int MixDepth = 1000;
 
   char table[2][7][5];
    // Заполним таблицы
   memcpy( table[0], BaseTable, sizeof( BaseTable ) );
   memcpy( table[1], BaseTable, sizeof( BaseTable ) );
 
    // Перемешаем таблицы
   randomize();
   for( int t = 0; t < 2; t++ ){
      for( int i = 0; i < MixDepth; i++ ){
          // Мешаем первую таблицу
         int y1 = rand() % 7;
         int x1 = rand() % 5;
         int y2 = rand() % 7;
         int x2 = rand() % 5;
         char tmp = table[t][y1][x1];
         table[t][y1][x1] = table[t][y2][x2];
         table[t][y2][x2] = tmp;
      }
   }
 
   int len = aString.Length();
   if( len & 1 ){
       // Добавим пробел
      aString += " ";
      len++;
   }
 
    // Сформируем зашифрованую строку
   AnsiString retVal;
   for( int i = 0; i < len; i++ ){
      int x, y;
      findXY( (char * )BaseTable, aString[i + 1], x, y );
      if( x < 0 || x < 0 ){
         return AnsiString( "Неизвестный символ в позиции " ) + IntToStr( i + 1 );
      }
      retVal += table[i & 1][y][x];
   }
 
   return retVal;
}
Добавлено через 6 часов 10 минут
gunslinger, как решить эту проблему?

Добавлено через 3 часа 31 минуту
Мне бы просто написать такой же код тодько под латиницу, да и ещё чтобы тоже через sRadioButton работал

Добавлено через 1 час 46 минут
Кто поможет разобраться?

Добавлено через 5 часов 22 минуты
Благодарю, уже разобрался, остался только последний вопрос.

Добавлено через 23 минуты
Вроде как в этой части кода происходит шифрование:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Сформируем зашифрованую строку
   AnsiString retVal;
   for( int i = 0; i < len; i++ ){
      int x, y;
      findXY( (char * )BaseTable, aString[i + 1], x, y );
      if( x < 0 || x < 0 ){
         return AnsiString( "Неизвестный символ в позиции " ) + IntToStr( i + 1 );
      }
      retVal += table[i & 1][y][x];
   }
 
   return retVal;
}
Вопрос - как сделать дешифрование?
0
place status here
 Аватар для gunslinger
3192 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,028
23.06.2016, 11:52
13-ый пост и ссылка в нем
По ней (ссылке в посте) находится информация, которую ты упорно игнорируешь (как сам алгоритм, так и ответ на вопрос):
Дешифрование происходит аналогично шифрованию, только таблицы, которые применялись для шифрования, меняются местами.
Предвидя дальнейшую серию вопросов, уточню: ты с шифрованием разобрался? Чтобы чужой код использовать, иногда тоже нужно шевелить извилинами.

Добавлено через 17 минут
Замечания:
1) сравнение в строке №6 - вместо второго x < 0, полагаю, должно быть y < 0
2) что за функция findXY в 5-ой строке? (понятно, что она ищет символ / символы; надеюсь, ее реализация у тебя есть)
3) для дешифрования в 9-ой строке попробуй заменить i на (i+1) именно со скобками
0
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 39
24.04.2017, 20:04
если есть исходный файл скиньте пожалуйста
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
26.04.2017, 21:32  [ТС]
вот программа, если еще надо...
Вложения
Тип файла: rar НОРМАЛЬНАЯ ВЕРСИЯ ПРОГРАММЫ!!!!!!!!.rar (810.6 Кб, 29 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2017, 21:32

Шифрование Уитстона "Двойной квадрат"
Добрые люди, нужна помощь, есть задание, но у меня не получается, не понимаю как записать все это: написать код на языке C++ с шифрованием,...

Алгоритм Шифрования Двойной Квадрат Уитсона
Всем доброго времени суток! В общем кто может помочь реализовать алгоритм шифрования &quot;Двойного Квадрата Уитсона&quot; нужен только...

Метод Двойной квадрат
Всем привет!!! Прошу помочь!!! Нужно сделать поле, в которое вписываешь рандомное слово, нажимаешь кнопку и на поле ниже появляется уже...

Метод шифрования Square (квадрат)
Здравствуйте, не могли бы помочь с методом шифрования и дешифрования квадрат, разработанным в 1997 году, может у кого есть программы на...

Реализовать алгоритм шифрования двойной перестановки
Здравствуйте, нужно написать код, который будет делать шифровку и дешифровку по методу двойной перестановки. Часть кода уже есть,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru