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

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

Войти
Регистрация
Восстановить пароль
 
OksanaD
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 10
#1

Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования - C++

02.01.2017, 21:40. Просмотров 497. Ответов 3
Метки нет (Все метки)

Собственно надо - "Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования".
Я написала какое-то подобие Цезаря.
Но вот зашифровать получается, а дешифровать - нет, поскольку функция strtok, которую использую для разбиения на слова - не работает с двумерным массивом.
Может кто-нибудь подскажет, если ли какая-либо функция для двумерного или может это возможно сделать каким-либо другим способом?
Еще мне нельзя использовать в этой программе: тип данных string и векторные массивы.
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
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    char *r,*p, *p1 = " .";
    char charList[20][2] = { '\0' };
    char str1[20];
    char charList1[20][2] = { '\0' };
    int n, i;
 
    cout << "Enter text " << endl;
    cin.getline(str1, sizeof(str1));
    //n = strlen(str1);
    //cout << '\n' << str1 << endl;
 
    p = strtok(str1, p1);
    //cout << p << endl;
    cout << "Code :" << endl;
    while (p != NULL)
    {
        n = strlen(p);
        //cout << n;
    for (i = 0; i<n; i++)
        switch (p[i])
        {
        case 'a': strcpy(charList[i], "b"); break;
        case 'b': strcpy(charList[i], "c"); break;
        case 'c': strcpy(charList[i], "d"); break;
        case 'd': strcpy(charList[i], "e"); break;
        case 'e': strcpy(charList[i], "f"); break;
        case 'f': strcpy(charList[i], "g"); break;
        case 'g': strcpy(charList[i], "h"); break;
        case 'h': strcpy(charList[i], "i"); break;
        case 'i': strcpy(charList[i], "j"); break;
        case 'j': strcpy(charList[i], "k"); break;
        case 'k': strcpy(charList[i], "l"); break;
        case 'l': strcpy(charList[i], "m"); break;
        case 'm': strcpy(charList[i], "n"); break;
        case 'n': strcpy(charList[i], "o"); break;
        case 'o': strcpy(charList[i], "p"); break;
        case 'p': strcpy(charList[i], "q"); break;
        case 'q': strcpy(charList[i], "r"); break;
        case 'r': strcpy(charList[i], "s"); break;
        case 's': strcpy(charList[i], "t"); break;
        case 't': strcpy(charList[i], "u"); break;
        case 'u': strcpy(charList[i], "v"); break;
        case 'v': strcpy(charList[i], "w"); break;
        case 'w': strcpy(charList[i], "x"); break;
        case 'x': strcpy(charList[i], "y"); break;
        case 'y': strcpy(charList[i], "z"); break;
        case 'z': strcpy(charList[i], "a"); break;
        
        
        }
    p = strtok(NULL, p1);
    
    for (i = 0; i<n; i++)
        cout << charList[i];
    cout << " " ;
        }
    
        cout << endl;
 
    /*cout << "Deode :" << endl;
        for (i = 0; i<20; i++)
            for (int j = 0; j<2; j++)
                r = strtok(charList[i][j], p1);
        cout << r << endl;
        while (p != NULL)
        {
            n = strlen(p);
            //cout << n;
            for (i = 0; i<n; i++)
 
 
    for (i = 0; i<n; i++)
        for (int j = 0; j<2; j++)
            switch (charList[i][j])
            {
            case 'a': strcpy(charList1[i], " z"); break;
            case 'b': strcpy(charList1[i], "a"); break;
            case 'c': strcpy(charList1[i], "b"); break;
            case 'd': strcpy(charList1[i], "c"); break;
            case 'e': strcpy(charList1[i], "d"); break;
            case 'f': strcpy(charList1[i], "e"); break;
            case 'g': strcpy(charList1[i], "f"); break;
            case 'h': strcpy(charList1[i], "g"); break;
            case 'i': strcpy(charList1[i], "h"); break;
            case 'j': strcpy(charList1[i], "i"); break;
            case 'k': strcpy(charList1[i], "j"); break;
            case 'l': strcpy(charList1[i], "k"); break;
            case 'm': strcpy(charList1[i], "l"); break;
            case 'n': strcpy(charList1[i], "m"); break;
            case 'o': strcpy(charList1[i], "n"); break;
            case 'p': strcpy(charList1[i], "o"); break;
            case 'q': strcpy(charList1[i], "p"); break;
            case 'r': strcpy(charList1[i], "q"); break;
            case 's': strcpy(charList1[i], "r"); break;
            case 't': strcpy(charList1[i], "s"); break;
            case 'u': strcpy(charList1[i], "t"); break;
            case 'v': strcpy(charList1[i], "u"); break;
            case 'w': strcpy(charList1[i], "v"); break;
            case 'x': strcpy(charList1[i], "w"); break;
            case 'y': strcpy(charList1[i], "x"); break;
            case 'z': strcpy(charList1[i], "y"); break;
 
            }
 
    for (i = 0; i<n; i++)
        cout << charList1[i] << " ";
 
    cout << endl;
    */
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2017, 21:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования (C++):

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

Шифрование/дешифрование текста: шифр Цезаря - C++
8. Написать программу, которая позволяет зашифровывать и расшифровывать с помощью «шифра Цезаря» сообщение, написанное на русском языке....

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

Шифрование методом перестановки с заданным ключом текста любой длины - C++
здравствуйте прошу помочь с исправлением кода #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using namespace std;...

Шифрование/Дешифрование - C++
Не получается выполнить последний пункт на Дешифровании(после замены) превратить цифры с буквы. Подскажите алгоритм пожалуйста. Именно этой...

Шифрование и дешифрование - C++
Помогите написать программу, которая будет шифровать и дешифровать матррицу.

3
Fixer_84
818 / 628 / 300
Регистрация: 30.04.2016
Сообщений: 1,969
02.01.2017, 21:45 #2
OksanaD, у меня есть пара программ для шифрования и дешифрования, которые я написал сам. Предлагаю вариант с помощью простых чисел:

Вот программа шифрования:

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
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
 
using namespace std;
 
bool simple(int N) 
{
    for (int i = 2; i <= sqrt(N); i++)
        if (N % i == 0)
            return false;
    if ((N == 0) || (N == 1))
        return false;
    return true;
}
 
string Cipher(string res, int K) 
{
    string a, b;
 
    for (int j = 0; j < K; j++)
    {
        for (int i = 0; i < res.length(); i++)
        {
            if (simple(i + 1))
                a += res[i];
            else
                b += res[i];
        }
        res = a + b;
        a = b = "";
    }
    return res;
}
 
int main()
{
    setlocale(LC_ALL, "Russian"); 
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string a, res;
    int K;
    cout << "Enter encoding phases quantity:" << endl;
    cout << "K = ";
    cin >> K; 
    while (getline(fin, a)) 
    {
        res = Cipher(a, K); 
        fout << res << endl;
    }
    cout << "Text has been encoded!" << endl;
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
Добавлено через 1 минуту
OksanaD, а вот дешифрование к ней (количество фаз шифрования и дешифрования должно совпадать):

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
#include <iostream>
#include <cmath>
#include <ctime>
#include <string>
#include <fstream>
 
using namespace std;
 
bool simple(int N)
{
    for (int i = 2; i <= sqrt(N); i++)
        if (N % i == 0)
            return false;
    if ((N == 0) || (N == 1))
        return false;
    return true;
}
 
string DeCipher(string s, int K)
{
    int l, p, wrd[500][500];
    l = s.length();
    p = 0;
    while (p != K)
    {
        for (int i = 0; i < l; i++)
        {
            wrd[p][i] = i + 1;
        }
        for (int i = 0; i < l; i++)
        {
            for (int j = l - 1; j > i; j--)
            {
                if ((!(simple(wrd[p][j - 1]))) && (simple(wrd[p][j])))
                {
                    swap(wrd[p][j - 1], wrd[p][j]);
                }
            }
        }
        for (int i = l; i >= 2; i--)
        {
            for (int j = 0; j < i - 1; j++)
            {
                if (wrd[p][j] > wrd[p][j + 1])
                {
                    swap(wrd[p][j], wrd[p][j + 1]);
                    swap(s[j], s[j + 1]);
                }
            }
        }
        p++;
    }
    return s;
}
 
void ConvertSec(int n)
{
    int h, m, s;
    string min, sec, hour;
    h = n / 3600;
    m = n / 60;
    s = n % 3600;
    if (h > 24)
        h = h % 24;
    if (m > 60)
        m = m % 60;
    if (s > 60)
        s = s % 60;
    if (h < 10)
        hour = "0" + to_string(h);
    if (m < 10)
        min = "0" + to_string(m);
    else
        min = to_string(m);
    if (s < 10)
        sec = "0" + to_string(s);
    else
        sec = to_string(s);
    if (h == 24)
        hour = "00";
    if (m == 60)
        min = "00";
    if (s == 60)
        sec = "00";
    cout << hour << ":" << min << ":" << sec << endl;
}
 
int x = clock();
int main()
{
    setlocale(LC_ALL, "Russian");
    ifstream fin("output.txt");
    ofstream fout("decipher.txt");
    string a, res;
    int K;
    cout << "Enter decoding phases quantity:" << endl;
    cout << "K = ";
    cin >> K;
    cout << "Decoding is going..." << endl;
    while (getline(fin, a))
    {
        res = DeCipher(a, K);
        fout << res << endl;
    }
    cout << "Ready!" << endl;
    fin.close();
    fout.close();
    int y = clock();
    cout << "Decoding time: ";
    ConvertSec(ceil((y - x) / 1000));
    system("pause");
    return 0;
}
1
OksanaD
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 10
02.01.2017, 21:51  [ТС] #3
Fixer_84, вновь выручили, большое спасибо вам!!
0
_Ivana
3229 / 1857 / 157
Регистрация: 01.03.2013
Сообщений: 5,085
Записей в блоге: 5
02.01.2017, 21:52 #4
C++
1
2
3
4
5
6
7
8
void f(char* c, char k) {if (*c) {*c ^= k; f(c+1, k);}}
 
int main() {
    char s[] = "Hello, world!";
    cout << "Исходный текст: " << s << '\n';
    f(s, 'a'); cout << "Зашифрованный текст:  " << s << '\n';
    f(s, 'a'); cout << "Расшифрованный текст: " << s << '\n';
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2017, 21:52
Привет! Вот еще темы с ответами:

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

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

XOR шифрование/дешифрование - C++
Всем привет. Пож-ста помогите написать программу, шифрующую/дешифрующую xor маску. 2 Примера : N1 из FF FF FF FF D2...

Шифрование / дешифрование файлов - C++
есть ли стандартные средства шифрования\дешифрования файлов? если нет, какие библиотеки посоветуете и где их найти


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

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

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