квадрат полибия онлайн



Квадрат полибия онлайн расшифровка

Автор Иван Сусликов задал вопрос в разделе Другие языки и технологии

помогите пожалуйста зашифровать сообщения квадратом полибия 6х6 и получил лучший ответ

Ответ от Игорь Чин,,[гуру]
уважуха тебе !! как же я далёк от этого, ничего не бум бум в этом) ) сорри что не по теме пишу)

Ответ от Алексей Кузьминов[гуру]
Для начала сделайте матрицу 6х6 и занесите в неё алфавит шифрования.
1. Вообще-то это называется шифр Цезаря, но не в этом суть.
Просто найдите букву в 2-мерном массиве.
Добавьте к номеру строки 1 и возьмите остаток от деления на 6 (чтобы 5+1=6 -> 0).
Потом возьмите букву в получившейся строке и том же столбце.
Для обратного шифрования надо добавлять 5 (это равносильно -1 после остатка по модулю 6)
ЗЫ
Этот метод не требует таких усилий. Обычно ЗАРАНЕЕ делают вектор перестановок char p[char] и просто посимвольно заменяют s[i]=p[s[i]]
2. Если основываться на википедии, то при шифровании нужно менять номера столбцов и строк разных символов. Но это алгоритм для человека. Для компьютера он чуток другой.
Для получения одной буквы результата шифрования используются 2 подряд идущие буквы исходного текста.
Поэтому, чтобы получать 1 символ за шаг, удвоим исходный текст:
пример 'секретно'->'секретносекретно'
попутно запомним длину исходной строки (обозначим её len) в примере len=8
Пробежимся с шагом 2 по удвоенной строке:
-- на каждом шаге работаем с символами A=s[2*i] и B=s[2*i+1]
-- найдём строку и столбец для A: rowA, colA и для B: rowB, colB
-- посчитаем idxA=(2*i<len)?rowA: colA; - если номер в первой части удвоенного текста, то берём строку, иначе - столбец
-- аналогично idxB=((2*i+1)<len)?rowB: colB;
-- в результат добавим символ матрицы строки idxA и столбца idxB
Для обратного шифрования нужно брать пару символов A=s[i] и B=s[i+len/2] (для простоты считаем len чётным, нечётный - вам для самостоятельной работы) .
Первый символ: cтрока rowA и столбец rowB. Второй символ: строка colA и столбец colB.
Таким образом 2 зашифрованных символа преобразуются 2 дешифрованных.
ЗЫ можно не удваивать строку, а брать символы 2*i и 2*i+1 в исходной строке, только не напрямую, а остаток от деления на len
ЗЗЫ
Метод сложный, теоретически должен работать. Но что называется на свой страх и риск =)

Ответ от Sasha Programmer[гуру]
Это не ответ на Ваш вопрос, но вот реализация шифровки текста из латинских букв с помощью квадрата 5х5.
========================================
#include <iostream>
using namespace std;
int main(){
char sqr[5][5] = {
{'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 word[80];// = "sometext"; // шифруемый текст
gets(word);
char *pword = new char[strlen(word)+1]; // массив для шифровки.
int b;
for(int i(0); i < 5*5; i++){ // шифруем
for(int j(0); j < strlen(word); j++){
if(word[j] == sqr[0][i] || tolower(word[j]) == sqr[0][i]){
b=i;
if((b+5) < 25){ pword[j] = sqr[0][b+5];}
else{ pword[j] = sqr[0][b+5-25];}
}
else if(word[j] == ' ') pword[j] = ' ';
else if(word[j] == 'j' || word[j] == 'J') pword[j] = 'j';
if(isupper(word[j])) pword[j] = toupper(pword[j]);
if(!isalpha(word[j])) pword[j] = word[j];
}
}
pword[strlen(word)] = '';
cout << pword << endl; // смотрим, что получилось
char *ppword = new char[strlen(pword)]; // массив для дешифровки
for(int i(0); i < strlen(pword); i++){ // дешфруем
for(int j(0); j < 25; j++){
if(pword[i] == sqr[0][j] || tolower(pword[i]) == sqr[0][j]) {
b = j;
if((b-5) >= 0) ppword[i] = sqr[0][b-5];
else ppword[i] = sqr[0][b-5+25];
}
else if(pword[i] == ' ') ppword[i] = ' ';
else if(pword[i] == 'j' || pword[i] == 'J') ppword[i] = 'j';
if(isupper(pword[i])) ppword[i] = toupper(ppword[i]);
if(!isalpha(pword[i])) ppword[i] = pword[i];
}
}
ppword[strlen(pword)] = '';
cout << ppword << endl; // смотрим на дешифровку
system("pause >> void");
return 0;
}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: помогите пожалуйста зашифровать сообщения квадратом полибия 6х6
Квадрат Полибия на Википедии
Посмотрите статью на википедии про Квадрат Полибия
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*