Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
#1

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

19.04.2014, 16:41. Просмотров 1095. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод зашифрованного текста методом подстановки (C++):

Найти способ расшифровки зашифрованного текста - C++
Здравствуйте, бьюсь над задачей по расшифровке текста, пока что безрезультатно. Сам алгоритм программы мне не нужен, только идеи, как можно...

Шифрование данных методом подстановки - C++
доброе время суток. нужно составить программу, которая шифровала бы и расшифровывала бы текст методом подстановки и перестановки. причем...

Шифрование данных методом подстановки - C++
Здравствуйте! Нужно написать программу, чтобы она шифровала произвольный текст методом подстановки: V={а,б,в,г,д,е} m=2 Не...

Написать программу шифрования и дешифрования методом подстановки - C++
Написать программу шифрования и дешифрования методом подстановки!!!

как сделать вывод текста, результата и продолжение текста - C++
#include &lt;iostream&gt; using namespace std; int main() { int win; cout&lt;&lt;&quot;Введите цифру\n&quot;; cin &gt;&gt; win; ...

Кодирование текста методом Хаффмана - C++
Вроде бы всё правильно , НО : 1)вылезает &quot;ё&quot; в самом начале , хотя сортируется map по умолчанию по алфавиту и &quot;ё&quot; должно быть в конце.. ...

13
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 18:14  [ТС] #2
Вывод зашифрованного текста методом подстановки
0
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
19.04.2014, 19:44 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я в шифровании не разбираюсь, но судя по всему у вас не идет обратного преобразования по ключу

попробуйте заменить так
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
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
19.04.2014, 19:45 #4
Так вроде всё логично:
Вы слово "tomsk" шифруете методом подстановки и получаете wrpvn; в данном случае соответствия:
w-t; r-o; p-m; v-s; k-n
Далее вы шифруете его ещё раз и меняете буквы местами. Получаете wnpvr
Согласно соответствиям выше - это tkmso, что вы и получаете.
Таким образом, перед тем, как расшифровывать подстановку (можно и после) - нужно расшифровать перестановку. Поставить буквы в правильный порядок.
0
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
19.04.2014, 19:50 #5
Кстати, что должно происходить если длина ключа меньше, чем количество символов?
0
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 19:52  [ТС] #6
спасибо огромное работает алелуя

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

Добавлено через 1 минуту
Цитата Сообщение от Полька 321 Посмотреть сообщение
алгоритм программы у меня следующий:
1. ввод текста
2. вывод зашифрованного текста методом подстановки
3. ввод длины,и собственно самого ключа для шифровки методом перестановки
4. вывод зашифрованного текста методом перестановки
5. вывод расшифрованного текста методом подстановки
6. вывод расшифрованного текста методом перестановки (что и не получается)
ВНИМАНИЕ!!! Код прилагается
С алгоритмом это не имеет ничего общего.
0
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
19.04.2014, 20:01 #8
Если разберусь, как у вас идет шифрование, то поправлю косяк.
0
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 20:02  [ТС] #9
taras atavin,будем мое сообщение поправлять или все же помогать?
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2014, 20:04 #10
И где ж у меня хоть буква философии?
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
19.04.2014, 20:07 #11
Цитата Сообщение от Полька 321 Посмотреть сообщение
все же помогать
Таки уже-же помогли, нет?
0
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
19.04.2014, 20:08  [ТС] #12
можно,нельзя,и что вообще у тебя тут за фигня и бла бла бла. не надо так

Добавлено через 44 секунды
MastAKK,помогли теперь осталось косячек один исправить и усе)
0
Vergil
42 / 36 / 14
Регистрация: 11.11.2009
Сообщений: 243
19.04.2014, 21:34 #13
Но знаю, то ли мы делаем, но вот
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
Полька 321
0 / 0 / 0
Регистрация: 19.05.2013
Сообщений: 19
20.04.2014, 05:59  [ТС] #14
спасибо большое! все работает как надо!у меня преподаватель проверял на той неделе,сказала все правильно,на тот момент у меня было сделано каждое шифрование только,дешифровки не было.
0
20.04.2014, 05:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 05:59
Привет! Вот еще темы с ответами:

Шифрование текста методом замены букв - C++
1.разработать алгоритм и программу для зашифрованного текста.используя замену следующих символов:а на о,о на у,у на а. 2.среднее слово ...

Шифрование текста методом замены букв - C++
Ребята, помогите. Завтра сдавать отчет, а я похерил исходники. Осталась сама программа, а дизассемблеровать сложно и нет времени. А...

Считывание текста с файла методом getchar - C++
Хочу считать текст с файла и вывести на экран но по моему у меня ошибка в коде. std::ifstream ifs(&quot;in.txt&quot;); ...

Шифрование и дешифрование текста методом шифрующих таблиц - C++
Помогите написать программу. Выполнить шифрование и дешифрование текста методом шифрующих таблиц. В качестве ключа использовать размер...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru