Квадрат полибия онлайн расшифровка
Автор Иван Сусликов задал вопрос в разделе Другие языки и технологии
помогите пожалуйста зашифровать сообщения квадратом полибия 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
ЗЗЫ
Метод сложный, теоретически должен работать. Но что называется на свой страх и риск =)
Для начала сделайте матрицу 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;
}
Это не ответ на Ваш вопрос, но вот реализация шифровки текста из латинских букв с помощью квадрата 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
спросили в Парфюм
Как по штрих коду узнать об оригинальности парфюма?
Дело в том, что для малогабаритных не пищевых продуктов наиболее распространены два типа
подробнее...
Как по штрих коду узнать об оригинальности парфюма?
Дело в том, что для малогабаритных не пищевых продуктов наиболее распространены два типа
подробнее...
ПОМОГИТЕ РАСШИФРОВАТЬ КРИПТОГРАММЫ!!!
1. это физическя защита данных k=13
2. квадрат полибия k=5
3. структурное
подробнее...
Какая норма РОЭ у детей 3-х лет?
#yaimg598712#
РОЭ- это старое определение современного СОЭ.
РОЭ - реакция оседания
подробнее...
квадрат Полибия
это настолько банальная задача, при том, что кода (времени) довольно много, что я ее решу только за
подробнее...
спросили в Питомцы
Кто знает читы на онлайн игру удивительные питомцы скажите пожааалуйста
на онлайн игры кодов почти нет но на эту игру я знаю что кодов точно
подробнее...
Кто знает читы на онлайн игру удивительные питомцы скажите пожааалуйста
на онлайн игры кодов почти нет но на эту игру я знаю что кодов точно
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Выделение
опишите подробно метод выделения полного квадрата
Выделение полного квадрата это такое тождественое преобразование трех-
Члена а2 2ав
подробнее...
опишите подробно метод выделения полного квадрата
Выделение полного квадрата это такое тождественое преобразование трех-
Члена а2 2ав
подробнее...
спросили в Пифагор
ваше отношение к "квадрату Пифагора"?доверяете ли вы ему?
Я верю в свою ЗВЕЗДУ!
А что касается квадрата Пифагора, - уважаю, понимаю, пользуюсь.
подробнее...
ваше отношение к "квадрату Пифагора"?доверяете ли вы ему?
Я верю в свою ЗВЕЗДУ!
А что касается квадрата Пифагора, - уважаю, понимаю, пользуюсь.
подробнее...
спросили в 656 год
нужна помощ! как пройти пять последних уровней в игре" спаси квадрат"???
Искать без кавычек
1.
1 Самая трудная игра в мире. Пройти её в состоянии только 2%
подробнее...
нужна помощ! как пройти пять последних уровней в игре" спаси квадрат"???
Искать без кавычек
1.
1 Самая трудная игра в мире. Пройти её в состоянии только 2%
подробнее...
спросили в Интернет
Где можно скачать немецко-русский и наоборот переводчик на Телефон? НЕ ОНЛАЙН!!!!
Самый лучший переводчик для телефона это бот-переводчик в Аське.
Как все знают - пользование
подробнее...
Где можно скачать немецко-русский и наоборот переводчик на Телефон? НЕ ОНЛАЙН!!!!
Самый лучший переводчик для телефона это бот-переводчик в Аське.
Как все знают - пользование
подробнее...