Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
4 / 4 / 0
Регистрация: 27.09.2015
Сообщений: 59
1

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

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

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

Каким образом мне это делать ?
я подумал что делать для каждой буквы if но это будет слишком много
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2016, 23:28
Ответы с готовыми решениями:

Шифрование текста
Здравствуйте, пытаюсь зашифровать слово, через ключ. #include <iostream> using namespace std;...

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

Шифрование и расшифрование текста
Напишите программу, которая позволяет зашифровать и расшифровать некоторый текст, написанный на...

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

5
Эксперт С++
3207 / 1734 / 435
Регистрация: 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
4 / 4 / 0
Регистрация: 27.09.2015
Сообщений: 59
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
Эксперт С++
3207 / 1734 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2016, 00:16 4
Vinori, не, так программы не пишут, учите теорию.
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
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
Заблокирован
12.06.2016, 16:14 6
Цитата Сообщение от Vinori Посмотреть сообщение
Каким образом мне это делать ?

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

символ a - 11110000 и т.д. код шифровки сам придумай.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2016, 16:14

Шифрование текста. XOR
Помогите с шифрование текста...с числоми вроде получалось. Что значит эта ошибка и как ее...

Простое шифрование текста
Здравствуйте! Решаю несложную задачу, но почему-то ошибка во втором тесте. Вот ссылка на задачу:...

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

Шифрование и дешифрование текста
Народ вот програма для шифрования текста мне нужно переделать так штоб били подпрограми: 1) на...


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

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

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