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

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

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

Метод одноалфавитного шифрования с заданным смещением - C++

20.02.2014, 19:39. Просмотров 1069. Ответов 0
Метки нет (Все метки)

Доброго времени суток. У меня в институте начался курс криптографии и как полагается первая лаба зашифровать строку шифрома Цезаря (знаю что сто раз было).
Задание звучит так:
Составить программу, шифрующую сообщения, состоящие из строчных букв кириллицы другими буквами того же самого алфавита. Для получения строки использовать генератор случайных чисел. Полученную последовательность циклически сдвинуть на число символов, равное номеру автора в списке. Зашифровать фамилию, имя и отчество автора. Расшифровать шифрованную строку. Вывести зашифрованную строку, а также исходную и расшифрованную строки. Подсчитать частоту появления букв в исходном и зашифрованном текстах. Сделать проверку на присутствие в строке символа, отсутствующего в алфавите.
В поисках решения получилось состряпать вот такой код:
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
#include <iostream>
#include <windows.h>
 
using namespace std; 
 
int main ()
 
{
    int shift = 18; //Сдвиг шифра, по заданию
     
    int i; 
    int j; 
     
    string line; 
    string desh;
    string desh1;
    
//---------------Шифрование-----------------------------------   
char str2 [30] = "ИВАНОВ ИВАН ИВАНОВИЧ"; //Шифруемая строка
::CharToOem (str2,str2);
 
line = str2; 
 
for (i = 0; i<line.length(); i++)
{
     line[i] = char(line[i] + shift);
} 
//---------------Деифрование----------------------------------- 
desh = line;
 
for (j = 0; j<desh.length(); j++)
{       desh[j] = char(desh[j] - shift);
        desh1 = desh;     
        }
        
//---------------Вывод----------------------------------------
char str3 [18] = "Исходыная строка:";
::CharToOem (str3,str3);
cout << str3 << " " << str2 << endl;
cout << endl;
 
char str4 [23] = "Зашифрованная строка:";
::CharToOem (str4,str4);
cout << str4 << " " << line << endl;
cout << endl;
 
char str5 [23] = "Расшифрованная строка:";
::CharToOem (str5,str5);
cout << str5 << " " << desh1 << endl;
cout << endl;
 
char str6 [100] = "Шифруемое сообщение содержит символы не входящие в алфавит.";
::CharToOem (str6,str6);
cout << str6 << endl;
cout << endl;
 
system("PAUSE");
return 0;    
}
Да, Char'ов тут много, но это вызвано тем что в инсте очень древние компы и там русские текст через
C++
1
setlocale(LC_ALL,"Russian");
неизбежно превращается в кракозяблики. А демонстрировать прогу как то надо.
Программа шифрует строку: Иванов Иван Иванович и получает зашифрованную строку: ЪФТЯаФ2ЪФТЯ2ЪФТЯаЪй

На все это дело препод мне говорит, что шифрует програм ок, но лаба не выполнена т.к. программа работает со всей кодировкой ASCII и пробелы шифруются не пробелами, а цифрами 2.

Так вот надо, что бы программа использовала не ASCII, а только русский алфавит засунутый в char; пробелы были нормальными, а не 2ки...

Подскажите пожалуйста как это реализовать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 19:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод одноалфавитного шифрования с заданным смещением (C++):

Метод шифрования - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { setlocale(0, &quot;RUS&quot;); ifstream...

Метод шифрования на основе перестановок байтов в пределах сообщения - C++
Нужен рабочий пример! Метод шифрования предусматривает реализацию двух этапов: инициализации и перестановка байтов. Этап...

Цикл со смещением на 1 символ - C++
Помогите со следующим заданием пожалуйста: Написать программу, которая циклически выводит ФИО со смещением на один символ (бегущая...

Zip запаковка\распаковка данных со смещением - C++
Воспользовавшись программой Offset file unzipper 0.3.6a узнал что у файла смещение(hex offset) = 3, windowBits=15. Теперь нужно как то...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Переписать строки из одного файла во второй со смещением - C++
Задано натуральное число k, символьный файл g и текстовый файл f. Файл g содержит 30 слов, каждое из которых будем называть ключевым....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 19:39
Привет! Вот еще темы с ответами:

Разработать программу работы с деком, организованным в массиве с циклическим заполнением и смещением - C++
Разработать подпрограммы, которые обеспечивают запросы на запись или чтение данных из очереди, стека или дека. Для организации указанных...

Как вставить индекс после максимального элемента массива со смещением остальных элементов? - C++
После первого максимального (минимального) элемента массива вставьте его номер, передвинув все элементы массива, сле¬дующие за ним, вправо...

Строка: Написать программу, которая циклически выводит ФИО со смещением на один символ - C++
Написать программу. Пользователь вводит строчку. Программы циклически выводит на экран со смещением на 1 символ эту строчку до тех пор,...

Требуется считать байты с потока с заданным смещением - C#
Требуется считать байты с потока с заданным смещением. Например считать с потока в массив биты с 6 по 17; Собственно когда я читаю...


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

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

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