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

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

Восстановить пароль Регистрация
 
Vinori
3 / 3 / 1
Регистрация: 27.09.2015
Сообщений: 40
10.06.2016, 23:28     Шифрование текста, табличная замена текста #1
Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим символом - его шифром. Выбрать некоторую таблицу, разработать способ ее представления, затем
а) зашифровать данный текст;
б) расшифровать данный текст

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

C++ Курсовая: шифрование текста.
Шифрование текста в файле C++
C++ Задача на шифрование текста, язык Cи.
шифрование текста C++
Шифрование текста. XOR C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
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
}
Vinori
3 / 3 / 1
Регистрация: 27.09.2015
Сообщений: 40
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;
}
Вот что то не работает некоторые буквы неправильно расшифровывает.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
12.06.2016, 00:16     Шифрование текста, табличная замена текста #4
Vinori, не, так программы не пишут, учите теорию.
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
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()];//тут шифруется
}
Идею показал, дальше сами.
RAFA91
Заблокирован
12.06.2016, 16:14     Шифрование текста, табличная замена текста #6
Цитата Сообщение от Vinori Посмотреть сообщение
Каким образом мне это делать ?

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

символ a - 11110000 и т.д. код шифровки сам придумай.
Yandex
Объявления
12.06.2016, 16:14     Шифрование текста, табличная замена текста
Ответ Создать тему
Опции темы

Текущее время: 17:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru