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

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

Войти
Регистрация
Восстановить пароль
 
Vinori
4 / 4 / 1
Регистрация: 27.09.2015
Сообщений: 56
#1

Шифрование текста, табличная замена текста - C++

10.06.2016, 23:28. Просмотров 674. Ответов 5
Метки нет (Все метки)

Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим символом - его шифром. Выбрать некоторую таблицу, разработать способ ее представления, затем
а) зашифровать данный текст;
б) расшифровать данный текст

Каким образом мне это делать ?
я подумал что делать для каждой буквы if но это будет слишком много
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2016, 23:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шифрование текста, табличная замена текста (C++):

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

Шифрование текста - C++
Здравствуйте, пытаюсь зашифровать слово, через ключ. #include <iostream> using namespace std; int main() { char str =...

Курсовая: шифрование текста. - C++
Здравствуйте. В связи с рядом причин(главная конечно лень xD ), свою курсовую я умудрился взять только сейчас. Сдача через 2 недели....

Шифрование текста. XOR - C++
Помогите с шифрование текста...с числоми вроде получалось. Что значит эта ошибка и как ее испрвить?..) #include <iostream> #include...

Шифрование и дешифрование текста - C++
Народ вот програма для шифрования текста мне нужно переделать так штоб били подпрограми: 1) на меню пользователя cout<<" Меню...

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

5
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.06.2016, 09:57 #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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//Один из простейших способов шифровки текста состоит в табличной замене
//каждого символа другим символом - его шифром. Выбрать некоторую таблицу,
//разработать способ ее представления, затем
//а) зашифровать данный текст;
//б) расшифровать данный текст
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <exception>
#include <iostream>
#include <limits>
#include <map>
#include <set>
#include <stdexcept>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::map        < char,     char    >   T_key;
typedef std::string                             T_text;
typedef std::set        < char  >               T_char_set;
typedef std::vector     < char  >               T_symbols;
///////////////////////////////////////////////////////////////////////////////
char    get_rand_symb()
{
    return  rand() % ( CHAR_MAX - CHAR_MIN + 1 ) + CHAR_MIN;
}
///////////////////////////////////////////////////////////////////////////////
void    make_rand_key
    (
        T_key   &   key,
        T_key   &   reverse_key
    )
{
    const   char    FIRST_ALPHABET_LETTER   =   'a';
    const   char    LAST_ALPHABET_LETTER    =   'z';
 
    const   size_t  ALPHABET_SIZE           =       LAST_ALPHABET_LETTER
                                                -   FIRST_ALPHABET_LETTER
                                                +   1;
 
    T_char_set      symbols_set;
 
    while   (
                    symbols_set.size()
                <   ALPHABET_SIZE
            )
    {
        char    rand_alnum_symb{};
 
        do
        {
            rand_alnum_symb     =   get_rand_symb();
        }
        while   (
                    !isalnum( rand_alnum_symb )
                );
 
        symbols_set.insert( rand_alnum_symb );
    }//while
 
    T_symbols   symbols (
                            symbols_set.begin   (),
                            symbols_set.end     ()
                        );
 
    std::random_shuffle
        (
            symbols.begin   (),
            symbols.end     ()
        );
 
    for (
            char
            symb{ FIRST_ALPHABET_LETTER };
            symb    <=  LAST_ALPHABET_LETTER;
            ++symb
        )
    {
        key[ symb ]     =   symbols[ symb   -   FIRST_ALPHABET_LETTER ];
 
        reverse_key
            [
                key[ symb ]
            ]
            =   symb;
    }//for
}
///////////////////////////////////////////////////////////////////////////////
void    input_text( T_text  &   text )
{
    std::cout   <<  "\n\nEnter text in lower-case Latin letters:\n-> ";
    std::cin    >>  text;
}
///////////////////////////////////////////////////////////////////////////////
void    encrypt_text
    (
        T_text  const   &   text,
        T_key   const   &   key,
        T_text          &   encrypted_text
    )
{
    for( auto   symb    :   text )
    {
        auto    it  =   key.find( symb );
 
        if  (
                it  ==  key.end()
            )
        {
            throw   std::domain_error("Invalid symbol in text.");
        }
 
        encrypted_text.push_back( it->second );
    }//for
}
///////////////////////////////////////////////////////////////////////////////
void    print_text_with_comment
    (
        T_text  const   &   text,
        T_text  const   &   comment
    )
{
    std::cout   <<  std::endl
                <<  comment
                <<  std::endl
                <<  text
                <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::ios::sync_with_stdio(false);
    srand(unsigned(time(0)));
 
    T_key   key;
    T_key   reverse_key;
 
    make_rand_key
        (
            key,
            reverse_key
        );
 
    for(;;)
    {
        T_text   text;
        input_text( text );
        T_text   encrypted_text;
 
        try
        {
            encrypt_text
                (
                    text,
                    key,
                    encrypted_text
                );
        }
        catch   (
                    std::exception  &   e
                )
        {
            std::cout   <<  e.what()
                        <<  std::endl;
 
            continue;
        }//catch
 
        print_text_with_comment
            (
                encrypted_text,
                "Encrypted text:"
            );
 
        T_text   decrypted_text;
 
        encrypt_text
            (
                encrypted_text,
                reverse_key,
                decrypted_text
            );
 
        print_text_with_comment
            (
                decrypted_text,
                "Decrypted text:"
            );
    }//for
}
0
Vinori
4 / 4 / 1
Регистрация: 27.09.2015
Сообщений: 56
11.06.2016, 23:58  [ТС] #3
Mr.X, я конечно понимаю что это хороший код и т.д , но для меня он очень сложен

Добавлено через 13 часов 18 минут
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
#include<iostream>
using namespace std;
int main()
{
    const int num=20;
    setlocale(LC_ALL, "RUS");
    char A[num];
    cout << "Введите текст который вы хотите зашифроват(angl): ";
    cin.get(A, 20);
    for (int i = 0; i < num; i++)
    {
        if (A[i] == 'a'|| A[i] == 'A') { A[i] = 'c'; }
        if (A[i] == 'b'|| A[i] == 'B') { A[i] = 'm'; }
        if (A[i] == 'c'|| A[i] == 'C') { A[i] = 'g'; }
        if (A[i] == 'd'|| A[i] == 'D') { A[i] = 's'; }
        if (A[i] == 'e'|| A[i] == 'E') { A[i] = 'i'; }
        if (A[i] == 'f'|| A[i] == 'F') { A[i] = 'n'; }
        if (A[i] == 'g'|| A[i] == 'G') { A[i] = 'o'; }
        if (A[i] == 'h'|| A[i] == 'H') { A[i] = 'z'; }
        if (A[i] == 'i'|| A[i] == 'I') { A[i] = 'v'; }
        if (A[i] == 'j'|| A[i] == 'J') { A[i] = 'y'; }
        if (A[i] == 'k'|| A[i] == 'K') { A[i] = 'u'; }
        if (A[i] == 'l'|| A[i] == 'L') { A[i] = 'z'; }
        if (A[i] == 'm'|| A[i] == 'M') { A[i] = 'w'; }
        if (A[i] == 'n'|| A[i] == 'N') { A[i] = 'k'; }
        if (A[i] == 'o'|| A[i] == 'O') { A[i] = 'd'; }
        if (A[i] == 'p'|| A[i] == 'P') { A[i] = 'x'; }
        if (A[i] == 'q'|| A[i] == 'Q') { A[i] = 't'; }
        if (A[i] == 'r'|| A[i] == 'R') { A[i] = 'f'; }
        if (A[i] == 's'|| A[i] == 'S') { A[i] = 'e'; }
        if (A[i] == 't'|| A[i] == 'T') { A[i] = 'q'; }
        if (A[i] == 'u'|| A[i] == 'U') { A[i] = 'j'; }
        if (A[i] == 'v'|| A[i] == 'V') { A[i] = 'h'; }
        if (A[i] == 'w'|| A[i] == 'W') { A[i] = 'r'; }
        if (A[i] == 'x'|| A[i] == 'X') { A[i] = 'p'; }
        if (A[i] == 'y'|| A[i] == 'Y') { A[i] = 'l'; }
        if (A[i] == 'z'|| A[i] == 'Z') { A[i] = 'a'; }
    }
    cout << "Вывод текста после шифровки: "<<A<<endl;
    for (int i = 0; i < num; i++)
    {
        if (A[i] == 'c') { A[i] = 'a'; }
        if (A[i] == 'm') { A[i] = 'b'; }
        if (A[i] == 'g') { A[i] = 'c'; }
        if (A[i] == 's') { A[i] = 'd'; }
        if (A[i] == 'i') { A[i] = 'e'; }
        if (A[i] == 'n') { A[i] = 'f'; }
        if (A[i] == 'o') { A[i] = 'g'; }
        if (A[i] == 'z') { A[i] = 'h'; }
        if (A[i] == 'v') { A[i] = 'i'; }
        if (A[i] == 'y') { A[i] = 'j'; }
        if (A[i] == 'u') { A[i] = 'k'; }
        if (A[i] == 'z') { A[i] = 'l'; }
        if (A[i] == 'w') { A[i] = 'm'; }
        if (A[i] == 'k') { A[i] = 'n'; }
        if (A[i] == 'd') { A[i] = 'o'; }
        if (A[i] == 'x') { A[i] = 'p'; }
        if (A[i] == 't') { A[i] = 'q'; }
        if (A[i] == 'f') { A[i] = 'r'; }
        if (A[i] == 'e') { A[i] = 's'; }
        if (A[i] == 'q') { A[i] = 't'; }
        if (A[i] == 'j') { A[i] = 'u'; }
        if (A[i] == 'h') { A[i] = 'v'; }
        if (A[i] == 'r') { A[i] = 'w'; }
        if (A[i] == 'p') { A[i] = 'x'; }
        if (A[i] == 'l') { A[i] = 'y'; }
        if (A[i] == 'a') { A[i] = 'z'; }
    }
    cout << "Вывод текста после дешифровки: " << A;
    cout << endl;
    system("pause");
    return 0;
}
Вот что то не работает некоторые буквы неправильно расшифровывает.
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2016, 00:16 #4
Vinori, не, так программы не пишут, учите теорию.
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,827
12.06.2016, 03:33 #5
Цитата Сообщение от Vinori Посмотреть сообщение
Mr.X, я конечно понимаю что это хороший код и т.д , но для меня он очень сложен
Это местный способ сказать "покажи свой код или иди на... со своим "сделай за меня" тредом".
Ну а если серьезно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
char table[256]={0};
strcpy(table+'a',"cmgs");//дальше строчку сами набивайте
strcpy(table+'A',"cmgs");//дальше строчку сами набивайте
cout<<"чего шифруем?"<<endl;
cin.peek();
cout<<"получилось:"<<endl;
while(cin.peek()!='\n')//тут читается
{
    if(!table[cin.peek()])
        cout<<"не знаю буквы "<<char(cin.get());
    cout<<table[cin.get()];//тут шифруется
}
Идею показал, дальше сами.
1
RAFA91
Заблокирован
12.06.2016, 16:14 #6
Цитата Сообщение от Vinori Посмотреть сообщение
Каким образом мне это делать ?

каждый символ переводи в двоичный код и пиши этот код в файл.

символ a - 11110000 и т.д. код шифровки сам придумай.
0
12.06.2016, 16:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2016, 16:14
Привет! Вот еще темы с ответами:

Задача на шифрование текста, язык Cи. - C++
Произвести шифрование текста согласно вводимому ключу , который представляет из себя последовательность символов ( изначально 1,2,3,4,5,6...

Написать программу: шифрование текста - C++
Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно...

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

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


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

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

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