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

Шифр Цезаря

10.03.2015, 19:09. Показов 8450. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код программы для взлома Шыффра Цэзара но
никак немогу доделать ее чтобы взломать строку


VTA.P,JR;STJQATPZX,VJX,JF;A SJFPAJP B;JWPSJB;.TJBDRRTBBLJ.;BCJX.-;ACP,C HJQHJQAT
PZX,VJCWTJ,PEP JRX-WTAJ,;KJCWXBJT,PQ TSJCWT.JC;JCAPRZJP,SJBX,ZJPC P,CXRJR;,E;HBK

Вот код программы
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <string>
     
    using namespace std;
    const int ARRAYSIZE = 255;
     
    void characterCount(char ch, int list[]);
    void calcShift( int& shift, int list[]);
    void writeOutput(ifstream &in, ofstream &out, int shift);
     
    int main()
    {
        int asciiCode = 0,
            shift = 0;
        string filename;
        char ch;
        ifstream infile;
        ofstream outfile;
        string reply;
     
        //input file
     
        infile.open("Ceasarencryptfile.txt");
        
            if (!infile.is_open()) { 
     
                cout << "Unable to open file or it doesn't exist." << endl;
     
                return 1;
     
            }
        //output file
     
     
     
        outfile.open("outputhack");
     
        int list[ARRAYSIZE] = {0}; 
     
            while (infile.peek() != EOF) 
            {
                infile.get(ch);
                characterCount(ch, list); 
            }
     
     
     
        infile.clear();
        infile.seekg(0);
     
        calcShift (shift, list); 
        writeOutput(infile, outfile, shift); 
     
        return 0;
        outfile.close();
    }
     
    void characterCount(char ch, int list[])
    {
            if (ch >= 'A' && ch <= 'z') 
            {
                int asciiCode = 0;
 
                asciiCode = static_cast<int>(ch); 
                list[asciiCode]++; 
            }
    }
     
    void calcShift( int& shift, int list[])
    {
        int maxIndex = 0; 
     
        for (int i = 32; i < ARRAYSIZE; i++)
        {
            if (list[maxIndex] < list[i])
                    maxIndex = i; 
        }
     
        if (maxIndex >= 'A' && maxIndex <= 'Z') 
            shift = 'E' - maxIndex;
     
        if (maxIndex >= 'a' && maxIndex <= 'z') 
            shift = 'e' - maxIndex;
    }
     
    void writeOutput(ifstream &infile, ofstream &outfile, int shift)
    {
        char ch;
     
        while (infile.peek() != EOF) { 
     
            infile.get(ch); 
     
                if (ch >= 'A' && ch <= 'Z')
                {
                    ch = 'A' + (((ch - 'A') + shift + 26) % 26);
                }
                if (ch >= 'a' && ch <= 'z') 
                {
                    ch = 'a' + (((ch - 'a') + shift + 26) % 26);
                }
     
            outfile << ch; //Print to the outfile
            cout << ch;
             
        }
    }
прошу помогите доделать пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2015, 19:09
Ответы с готовыми решениями:

Шифр цезаря
Столкнулся с такой проблемой нужно &quot;Разработать прикладное приложение для шифрования текста с помощью шифра простой замены. Приложение...

Шифр Цезаря
Здравствуйте. Помогите, пожалуйста. Необходимо сделать так, чтобы шифр не вылезал за рамки заданного алфавита..сейчас же он все равно...

Шифр Цезаря
Створити програму, що реалізовує алгоритм дешифрування Цезаря, для латинського алфавіту з прогресуючим кроком від 3 до 10 (ВЕЛИКІ малі...

14
10.03.2015, 19:22

Не по теме:

Цитата Сообщение от whitejoker Посмотреть сообщение
для взлома Шыффра Цэзара
:rofl:

0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
11.03.2015, 15:29  [ТС]
Помогите с программой
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
11.03.2015, 17:28
Для начала - этот процесс называется расшифровка текстовой информации (на будущее).
Теперь более конкретно - расскажи, что делает каждая твоя процедура, ничего не закомментировано и трудно ориентироваться, в результате сложно дать правильное направление
0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
11.03.2015, 23:03  [ТС]
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <string>
     
    using namespace std;
    const int ARRAYSIZE = 255;
     
    void characterCount(char ch, int list[]); //Подсчет символов
    void calcShift( int& shift, int list[]); //Вычисление смещения
    void writeOutput(ifstream &in, ofstream &out, int shift); //запись в файл расшифрованого текста
     
    int main()
    {
        int asciiCode = 0,
            shift = 0;
        string filename;
        char ch;
        ifstream infile;
        ofstream outfile;
        string reply;
     
        //input file
     
        infile.open("Ceasarencryptfile.txt");
        
            if (!infile.is_open()) { 
     
                cout << "Unable to open file or it doesn't exist." << endl;
     
                return 1;
     
            }
        //output file
     
     
     
        outfile.open("outputhack");
     
        int list[ARRAYSIZE] = {0}; 
     
            while (infile.peek() != EOF) 
            {
                infile.get(ch);
                characterCount(ch, list); //заносим в массив каждый символ текста
            }
     
     
     
        infile.clear();
        infile.seekg(0);
     
        calcShift (shift, list); //Вычисляем смещение
        writeOutput(infile, outfile, shift); //Виводим результат
     
        return 0;
        outfile.close();
    }
     
    void characterCount(char ch, int list[])
    {
            if (ch >= 'A' && ch <= 'z') //Если большая или маленькая буква
            {
                int asciiCode = 0;
 
                asciiCode = static_cast<int>(ch); //Записываем код символа
                list[asciiCode]++; //и заносим в массив
            }
    }
     
    void calcShift( int& shift, int list[])
    {
        int maxIndex = 0; 
     
        for (int i = 32; i < ARRAYSIZE; i++)
        {
            if (list[maxIndex] < list[i])
                    maxIndex = i; 
        }
     
        if (maxIndex >= 'A' && maxIndex <= 'Z') 
            shift = 'E' - maxIndex; //вычисляем ключ (Е - символ с максимальной частотой появления в текстах)
     
        if (maxIndex >= 'a' && maxIndex <= 'z') 
            shift = 'e' - maxIndex;
    }
     
    void writeOutput(ifstream &infile, ofstream &outfile, int shift)
    {
        char ch;
     
        while (infile.peek() != EOF) { 
     
            infile.get(ch); 
     
                if (ch >= 'A' && ch <= 'Z')
                {
                    ch = 'A' + (((ch - 'A') + shift + 26) % 26); //расшифровка за формулой шифра цезара
                }
                if (ch >= 'a' && ch <= 'z') 
                {
                    ch = 'a' + (((ch - 'a') + shift + 26) % 26);
                }
     
            outfile << ch; //Print to the outfile
            cout << ch;
             
        }
    }
код закоментил
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
12.03.2015, 09:44
Давай по порядку...
C++
1
void characterCount(char ch, int list[])
здесь ты берешь код символа по asci
C++
1
asciiCode = static_cast<int>(ch);
вставляешь код символа в asciiCode. Что за массив идет дальше?
0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
12.03.2015, 18:33  [ТС]
массив в который записываются все символы которые встречаються в шифротексте

Добавлено через 2 часа 29 минут
Блин помогите доработать прогу

прога прекрасно взламывает шифротексты которые были зашифрованы с помощъю алфавита размерности 26 тоесть в алфавите только буквы англ

а в моем случае в алфавите еще и символы - ; , . и символы пробелов тоже шифруются

в этом и проблема немогу заставить прогу взламывать шифротекст
поэтому и прошу помощи
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
14.03.2015, 19:29
перечитал все сначала, и нифига не понял - что тебе нужно сделать?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
14.03.2015, 19:51
Цитата Сообщение от whitejoker Посмотреть сообщение
а в моем случае в алфавите еще и символы - ; , . и символы пробелов тоже шифруются
А на основе чего ты взламываешь ключ для шифра Цезаря? Частотный анализ?
Откуда ты брал таблицу относительных частот букв английского алфавита включая пробел?
В исходном тексте символы ; , . присутствуют?

Добавлено через 2 минуты
Цитата Сообщение от whitejoker Посмотреть сообщение
if (ch >= 'A' && ch <= 'z')
Вообще, стандартная реализация шифра Цезаря подразумевает, что все символы у тебя в одном регистре.
Иначе у тебя алфавит увеличивается в два раза.
0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
14.03.2015, 23:33  [ТС]
Основывался на том что буква Е самая частая
а за алфавит взят таблицу аски но видимо не проканало
шифротекст я привел в начале
Code
1
2
VTA.P,JR;STJQATPZX,VJX,JF;A SJFPAJP B;JWPSJB;.TJBDRRTBBLJ.;BCJX.-;ACP,C HJQHJQAT
 PZX,VJCWTJ,PEP JRX-WTAJ,;KJCWXBJT,PQ TSJCWT.JC;JCAPRZJP,SJBX,ZJPC P,CXRJR;,E;HBK
алфавит
Code
1
ABCDEFGHIJKLMNOPQRSTUVWXYZ .,;-'
помогите отладить програму так чтобы она все верно расшифровала
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.03.2015, 01:49
Цитата Сообщение от whitejoker Посмотреть сообщение
в этом и проблема
Проблема в полном непонимании того, что делаете. Для шифра Цезаря символы алфавита должны образовывать группу относительно операции сдвига.
Основывался на том что буква Е самая частая
Книга, в которой нет ни одной буквы "е"
0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
15.03.2015, 16:54  [ТС]
Для шифра Цезаря символы алфавита должны образовывать группу относительно операции сдвига.
Как описать это кодом???
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.03.2015, 17:05
Опишите, для начала словами. Тогда и закодировать сумеете.
0
0 / 0 / 0
Регистрация: 08.03.2015
Сообщений: 34
16.03.2015, 00:10  [ТС]
Если честно то я н совсем понимаю как это зделать))
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
16.03.2015, 02:09
Цитата Сообщение от whitejoker Посмотреть сообщение
зделать
Возьмите детские кубики с буквами, сложите из них алфавит и переставьте по алгоритму Цезаря. А потом посмотрите на ваш алфавит - и найдите 10 отличий.
Миниатюры
Шифр Цезаря  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2015, 02:09
Помогаю со студенческими работами здесь

Шифр Цезаря
Объясните пожалуйста есть формула для шифра Цезаря :En(x) = (x +n)mod26 почему в коде надо еще отнять 65, а потом прибавить. 65- это код...

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

Шифр Цезаря
Вот есть готовый код программы, может, кому понадобиться:) #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; using...

C++ Шифр Цезаря
Help нужно написать программу на С++, которая шифрует русские и английские слова. Делает запрос на сдвиг. Зашифрованный код переводил...

Шифр Цезаря
text - исходный code - закодированный decode - дешифрованный после компиляции в файл code в конец ложится пробел, откуда он...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru