Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19

Вывод зашифрованного текста методом подстановки

19.04.2014, 16:41. Показов 3045. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
делаю курсовую.тема шифровка/дешифровка текста методом подстановка+перестановка. суть в том, что пользователь вводит текст для шифрования латинскими буквами и без пробелов. написала программу,не могу только написать функцию дешифровки для метода перестановки. пробовала но расшифровывает неправильно. алгоритм программы у меня следующий:
1. ввод текста
2. вывод зашифрованного текста методом подстановки
3. ввод длины,и собственно самого ключа для шифровки методом перестановки
4. вывод зашифрованного текста методом перестановки
5. вывод расшифрованного текста методом подстановки
6. вывод расшифрованного текста методом перестановки (что и не получается)
ВНИМАНИЕ!!! Код прилагается
Люди добрые не глупые,помогите пожалуйста девушке на 9ом месяце беременности) курсач надо через 2 недели сдать, а то рожать скоро,ходить будет на пары не вариант) ещё документации кучу делать
вопщем надеюсь на адекватность и ум форумчан
заранее огромное спасибо от меня и будущего поколения
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
//ïåðåìåííûå ïîäñòàíîâêè
    char buff[50] = {0};
//ïåðåìåííûå ïåðåñòàíîâêè
 const int MAXLEN=200;
const int KEYLENGHT1=18;
    int size,lenght,n,c;
    int *keyReplace; 
 
     char buff1[50] = {0};
//øèôðîâàíèå ìåòîäîì ïîäñòàíîâêè, ãäå êàæäàÿ áóêâà èñõîäíîãî òåêñòà çàìåíÿåòñÿ
// òðåòüåé ïîñëå íåå áóêâîé â àëôàâèòå
void shifr_pod()
{
     cout<<"Ââåäèòå ñîîáùåíèå,êîòîðîå áóäåò çàêîäèðîâàííî.Ëàòèíñêèìè áóêâàìè,áåç ïðîáåëîâ!!!"<<endl;
    cin>>buff;
    lenght = strlen(buff);  
    cout<<endl;
    for(int i = 0;i < strlen(buff); i++)
        buff[i] += 3;
    cout<<"Ñîîáùåíèå çàøèôðîâàííîå ìåòîäîì ïîäñòàíîâêè: ";
    cout<<buff<<endl;
}
//øèôðîâàíèå ìåòîäîì ïåðåñòàíîâêè
/*ôóíêöèÿ äëÿ ââîäà êëþ÷à*/
void vvod_key()
{
    cout<<"Ââåäèòå äëèíó êëþ÷à: ";
    cin>>size;
    cout<<endl;
    keyReplace = new int[size];
    cout<<"Ââåäèòå êëþ÷: ";
    for(int i=0;i<size;i++)
        cin>>*(keyReplace+i);   
}
/*øèôðîâàíèå*/
void shifr_per()
{
    //char *msgTo, *msgOut;
    for(int i=lenght;i<lenght+size;i++)
    {
        *(buff+i)= ' ';
    }
//îïðåäåëåíèå áëîêîâ
    n = lenght/size;
    if(lenght%size>0) n++;
    *(buff1+lenght+size-1)='\0';
    //cout<<"num blocks "<<n<<endl;
    
    for(int i=0;i<n;i++)
        for(int j=0;j<size;j++)
        {   
            c = *(keyReplace+j)-1;
            *(buff1+i*size+j) = *(buff+i*size+c);
        }
    puts(buff1);    
}
/*äåøèôðîâàíèå ìåòîäîì ïîäñòàíîâêè*/
void deshifr_pod()
{
     cout<<"Äåøèôðîâàíèå ìåòîäîì ïîäñòàíîâêè: ";
    for(int i = 0;i < strlen(buff1); i++)
        buff1[i] -= 3;
    cout<<buff1<<endl;
}
/*äåøèôðîâàíèå ìåòîäîì ïåðåñòàíîâêè*/
 
//ãëàâíàÿ ôóíêöèÿ
int main()
{
    setlocale(0,"RUS");
    shifr_pod();
    cout<<endl;
    vvod_key();
    cout<<endl;
    cout<<"Ñîîáùåíèå çàøèôðîâàííîå ìåòîäîì ïåðåñòàíîâêè: ";
    shifr_per();
    cout<<endl;
    deshifr_pod();
    cout<<endl;
    
    
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2014, 16:41
Ответы с готовыми решениями:

Дешифровщик текста, зашифрованного методом Цезаря
Здравствуйте. В универе задали написать прогу, которая расшифровывает заранее зашифрованный методом Цезаря текст. Реализовал проверку на...

Расшифровка текста, зашифрованного методом Кардано
Подскажите пожалуйста как можно сделать обратное действие(DeCrypt), то есть вернуть только буквы под 1, должно получится...

Криптоанализ текста, зашифрованного методом простой замены
Нужна помощь с задачкой. тема: расшифровать шифр простой замены. Она из сборника Жданова и Куденковой. Уже второй день бьюсь, но получается...

13
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 18:14  [ТС]
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
19.04.2014, 19:44
Лучший ответ Сообщение было отмечено Полька 321 как решение

Решение

Я в шифровании не разбираюсь, но судя по всему у вас не идет обратного преобразования по ключу

попробуйте заменить так
C++
1
2
3
4
5
6
7
8
9
10
/*дешифрование методом перестановки*/
 void deshifr_per()
       {   cout<<"Дешифрование методом перестановки: ";
        char *buff2 = new char[size];
        for (int i = 0; i < strlen(buff1); i++) {
        buff2[keyReplace[i]-1]=buff1[i];
        }
        for (int i = 0; i < strlen(buff1); i++) {
         cout<<buff2[i];
        }}
Конечно, код ужасный, но вроде работает.
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
19.04.2014, 19:45
Так вроде всё логично:
Вы слово "tomsk" шифруете методом подстановки и получаете wrpvn; в данном случае соответствия:
w-t; r-o; p-m; v-s; k-n
Далее вы шифруете его ещё раз и меняете буквы местами. Получаете wnpvr
Согласно соответствиям выше - это tkmso, что вы и получаете.
Таким образом, перед тем, как расшифровывать подстановку (можно и после) - нужно расшифровать перестановку. Поставить буквы в правильный порядок.
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
19.04.2014, 19:50
Кстати, что должно происходить если длина ключа меньше, чем количество символов?
0
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 19:52  [ТС]
спасибо огромное работает алелуя

Добавлено через 2 минуты
ну если например при том же слове "tomsk" будет ключ 2431 то по перестановке он должен зашифровать так
"osmt k" (между osmt и k 3 пробела)
кстати да,косяк! на счет соразмерности не подумала
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.04.2014, 20:00
Цитата Сообщение от Полька 321 Посмотреть сообщение
аписала программу,не могу только написать функцию дешифровки для метода перестановки. пробовала но расшифровывает неправильно. алгоритм программы у меня следующий:
Если расшифровку не осилила, то как справилась с зашифровкой? Пока не расшифровала, нельзя утверждать, что написала именно шифратор, а не анаграматор.

Добавлено через 1 минуту
Цитата Сообщение от Полька 321 Посмотреть сообщение
алгоритм программы у меня следующий:
1. ввод текста
2. вывод зашифрованного текста методом подстановки
3. ввод длины,и собственно самого ключа для шифровки методом перестановки
4. вывод зашифрованного текста методом перестановки
5. вывод расшифрованного текста методом подстановки
6. вывод расшифрованного текста методом перестановки (что и не получается)
ВНИМАНИЕ!!! Код прилагается
С алгоритмом это не имеет ничего общего.
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
19.04.2014, 20:01
Если разберусь, как у вас идет шифрование, то поправлю косяк.
0
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 20:02  [ТС]
taras atavin,будем мое сообщение поправлять или все же помогать?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.04.2014, 20:04
И где ж у меня хоть буква философии?
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
19.04.2014, 20:07
Цитата Сообщение от Полька 321 Посмотреть сообщение
все же помогать
Таки уже-же помогли, нет?
0
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 20:08  [ТС]
можно,нельзя,и что вообще у тебя тут за фигня и бла бла бла. не надо так

Добавлено через 44 секунды
MastAKK,помогли теперь осталось косячек один исправить и усе)
0
43 / 37 / 17
Регистрация: 11.11.2009
Сообщений: 246
19.04.2014, 21:34
Но знаю, то ли мы делаем, но вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*дешифрование методом перестановки*/
 void deshifr_per()
       {   cout<<"Дешифрование методом перестановки: ";
        char *buff2 = new char[strlen(buff1)];
        for (int i = 0; i < (strlen(buff1)/size); i++) 
        {
        for (int j = 0; j <size ; j++) {
          buff2[size*i+keyReplace[j]]=buff1[size*i+j];
                  }
 
        }
    
        for (int i = 1; i <=strlen(buff1); i++) {
            cout<<buff2[i]; //выводятся ваши знаки
        }}
Проверял при длине ключа 2, 3, 4, 5.
Но вам стоит все же проверить. Т.к. при шифровании добавляются знаки, то они и в ответе выводятся. Либо замените
cout<<buff2[i]; //выводятся ваши знаки
на
if (buff2[i]!=(' '-3)) cout<<buff2[i]; // кривое решение, но не выводятся
Я в шифровании мало, что понимаю, я просто пишу на С++. Может быть, taras atavin прав и весь код не является шифрованием как таковым. Не знаю. Тут уже на ваши знания полагаемся.
0
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
20.04.2014, 05:59  [ТС]
спасибо большое! все работает как надо!у меня преподаватель проверял на той неделе,сказала все правильно,на тот момент у меня было сделано каждое шифрование только,дешифровки не было.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2014, 05:59
Помогаю со студенческими работами здесь

Задача: Криптоанализ текста, зашифрованного методом простой замены
Помогите решить задачку. :) Весь форум обошёл, решения этого варианта так и не нашёл, может кто ещё помнит как это делается и поможет. ...

Шифратор текста методом подстановки
Доброго времени суток! Помогите решить проблему. Мне нужно написать шифратор который, шифрует текст методом подстановки, т.е. есть таблица...

Как сделать вывод зашифрованного текста в один файл и расшифрованного текста в другой файл?
Нужно вывести текст зашифрованного сообщения в один файл и расшифрованное сообщение во второй файл var st,kl,kk:string; t,tt:array...

Шифрование текста методом простой подстановки - оптимизировать код
вроде правильно сделала, но препад попросил укоротить программный код в бтн 1 и бтн2 unit Unit1; interface uses Windows,...

Дешифрование зашифрованного текста
Задача:Как сделать чтобы зашифрованный текст снова стал нормальным текстом??Нужно применить array_flip() $code = array ( 'W'...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru