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

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

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

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

20.02.2014, 19:39. Просмотров 1047. Ответов 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ки...

Подскажите пожалуйста как это реализовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 19:39     Метод одноалфавитного шифрования с заданным смещением
Посмотрите здесь:
C++ Метод шифрования
Метод шифрования на основе перестановок байтов в пределах сообщения C++
C++ Цикл со смещением на 1 символ
Zip запаковка\распаковка данных со смещением C++
C++ Переписать строки из одного файла во второй со смещением
C++ Разработать программу работы с деком, организованным в массиве с циклическим заполнением и смещением
Строка: Написать программу, которая циклически выводит ФИО со смещением на один символ C++
C++ Как вставить индекс после максимального элемента массива со смещением остальных элементов?
C++ Класс строки (удаление из строки слова с заданным номером и символа с заданным номером)
C++ шифрования
Алгоритм шифрования RSA C++
Алгоритм шифрования Рабина C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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