Шифр Цезаря (Реализация на С++)

C++   6 Июнь 2012  Автор статьи:  

Программа шифрует только символы латинского алфавита, остальные остаются без изменений.
Реализация данного алгоритма на 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
//Программа шифрования/дешифрования символов латиницы алгоритмом Цезаря
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>

using namespace std;
    int main()
    {
        int k; //Переменная выбора - шифрование/дешифрование
        int shift; //Величина сдвига
        string result = ""; //Строка - результат
        cout<<"Enter 1 for encryption and decryption of 2\n";
        cin>>k;
        switch (k) //Если k
        {
        case 1: //Если выбрано шифрование
            {
            cout<<"Enter value shift for encryption\n";
            cin>>shift;
            if (shift > 26)
                shift = shift % 26; //Вычисление сдвига
            cout<<"Read of file...\n";
            setlocale(LC_ALL,"Russian");//Чтение файла
            string s; //Строка считанная из файла
            ifstream in("Test.txt");
            getline(in,s);
            cout<<"Text of file: \n"<<s<<endl;
            in.close();
            cout<<"Reading complete!\n";
            cout<<"Encryption...\n";
            for (int i = 0; i < s.length(); i++)
                {
                    //Если не латиница
                    if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 122)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 90)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                }
            cout<<"Encryption complete!\n";
            cout<<"Result:\n";
            cout<<result; //Вывод результата
            break;
            }
        case 2: //Если выбрано дешифрование
            {
            cout<<"Enter value shift for decryption\n";
            cin>>shift;
            if (shift > 26)
                shift = shift % 26;
            cout<<"Read of file...\n";
            setlocale(LC_ALL,"Russian");
            string s;
            ifstream in("Test.txt");
            getline(in,s);
            cout<<"Text of file: \n"<<s<<endl;
            in.close();
            cout<<"Reading complete!\n";
            cout<<"Decryption...\n";
            for (int i = 0; i < s.length(); i++)
                {
                    //Если не латиница
                    if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) - shift < 97)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) - shift < 65)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift);
                        }
                }
            cout<<"Decryption complete!\n";
            cout<<"Result:\n";
            cout<<result; //Вывод результата
            break;
            }
        default: //Если ошибочное значение
            {
            cout<<"Error value\n";
            break;
            }
        }
        getch();
        return 0;
    }

  • Victor

    как он шифрует просто компилирует и все а где шифрованный текст

    • Victor

      извиняюсь все заработало!!!!!

    • Сергей Петров

      Во первых, надо указывать не буквы, в value shift, а сдвиг, это число, во вторых прога считывает данные с заранее созданного файла, почитайте код.

  • Victor

    как он шифрует просто компилирует и все а где шифрованный текст

  • Victor

    извиняюсь все заработало!!!!!

  • Light

    а можно ли сделать это с кириллицей???

    • http://cybern.ru/ lordrp

      Да.

    • http://cybern.ru/ lordrp

      Да.

  • bezveazof

    Доброго времени суток, не силен в программировании, но столкнулся с необходимостью использования данного кода, скачал C builder и скопировал код программы, в итоге мне при запуске выдает следующее. Подскажите пожалуйста как можно решить вопрос.

    • http://cybern.ru/ lordrp

      К сожалению тупое копирование кода, не дает результата… Скомпилируйте сами в C builder простую программу и вы поймете, как запустить эту.

  • bezveazof

    Доброго времени суток, не силен в программировании, но столкнулся с необходимостью использования данного кода, скачал C builder и скопировал код программы, в итоге мне при запуске выдает следующее. Подскажите пожалуйста как можно решить вопрос.

  • Alex111111

    Программа не шифрует. Из файла строку считывает, но не шифрует ее.

    • http://cybern.ru/ lordrp

      Данная программа выводит результат шифрования на экран.

Научиться программировать

  • на Delphi

  • на Java

  • на C++