0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 16
1

Шифрация (С++)

11.12.2011, 12:05. Показов 4028. Ответов 33
Метки нет (Все метки)

"Один из методов шифрации называется наложением гаммы. Делается это следующим образом: берется некоторое случайное число в диапазоне от 127 до 255 — гамма, и код каждого символа строки заменяется кодом, получающимся в результате операции: новый код=старый код XOR гамма.
Написать программу, реализующую:
• данный метод шифрации;
• дешифрацию строки при заданной гамме.

Входные данные:
• шифруемая строка.

Выходные данные:
• гамма;
• зашифрованная строка."
Совсем не понимаю, что от меня хотят
Подскажите, пожалуйста, с чего начать.

Добавлено через 13 часов 57 минут
Я так поняла, что нужно взять буквы из моей строки, представить их в двоичном коде и сложить с двоичным представлением буквы в новой полученной гамме (массиве).
Но не знаю, как реализовать в программе такое действие: Ввожу строку, и данный массив символов представляется в виде массива индекса данных элементов из массива "Алфавит".
Кто-нибудь знает как это можно реализовать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2011, 12:05
Ответы с готовыми решениями:

Шифрация
Шифрация. Один из методов шифрации называется наложением гаммы. Делается это следующим образом:...

Шифрация битов
пyтём смeны мeстaми 0-гo и 1-гo битoв, 2-гo и 3-гo, … , 30-гo и 31-гo битoв. Фyнкция дoлжнa...

Шифрация и дешифрация по квадрату Полибия
Перенесено из темы https://www.cyberforum.ru/csharp-beginners/thread441477.html niutsu, а на...

Шифрация/дешифрация кода Морзе, нужны комментарии к коду
string Shifr(string a) { string str = ""; for (int i = 0; i < a.size(); i++) { if (a >= '0'...

33
Заблокирован
11.12.2011, 12:07 2
Цитата Сообщение от Сольвейг Посмотреть сообщение
представить их в двоичном коде и сложить с двоичным представлением буквы в новой полученной гамме (массиве).
нет, все и так в двоичном коде. Векторная операция ^ и есть сложение по модулю 2. учить матчасть.
1
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2011, 12:23 3
Цитата Сообщение от alkagolik Посмотреть сообщение
Векторная операция ^
Битовая
Цитата Сообщение от alkagolik Посмотреть сообщение
учить матчасть.
1
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.12.2011, 12:34 4
Цитата Сообщение от Сольвейг Посмотреть сообщение
"Один из методов шифрации называется наложением гаммы. Делается это следующим образом: берется некоторое случайное число в диапазоне от 127 до 255 — гамма
Любой файл это последовательный набор байт, значения которых от 0 до 255, то есть элементы кольца вычетов по модулю 256. Поэтому можно методом гаммирования зашифровать любой файл (лучше рассматривать двоичные файлы) и каждый элемент гаммы - число от 0 до 255
1
Заблокирован
11.12.2011, 12:44 5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Битовая
с каких пор байт не вектор, а векторная операция - битовая?
0
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2011, 12:45 6
Цитата Сообщение от alkagolik Посмотреть сообщение
а векторная операция - битовая?
Примерно с тех пор, как она называется bitwise, то есть побитовая.)
0
Заблокирован
11.12.2011, 12:46 7
Deviaphan, не знаю я в математике никаких битвайсов
0
Эксперт С++
5032 / 2611 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
11.12.2011, 12:48 8
Цитата Сообщение от Сольвейг Посмотреть сообщение
Совсем не понимаю, что от меня хотят
Еще бы. Шифрация, дешифрация.. я бы тоже не понял.
0
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2011, 12:51 9
Цитата Сообщение от alkagolik Посмотреть сообщение
не знаю я в математике
В С++ нет векторных операторов. Вообще. И векторного оператора ^ нету, а битовый оператор ^ есть.

Добавлено через 23 секунды
Цитата Сообщение от alkagolik Посмотреть сообщение
не знаю я в математике никаких битвайсов
А в математике нет никаких байтов.
0
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 16
11.12.2011, 12:52  [ТС] 10
Для того, чтобы сложить, мне же всё равно нужно как-то вывести вместо буквы её индекс в массиве.
Я не понимаю как.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.12.2011, 12:53 11
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
#include <iostream>
#include <cstring>
 
void gammaEnDecrypt(std::string::iterator begin, std::string::iterator end, const int gamma)
{
    for( ; begin != end; ++begin)
        *begin ^= gamma;
}
    
int main()
{
    std::string str;
    char ch = 'a';
    str += (ch); str += (ch + 13); str += (ch + 3); str += ' ';
    str += (ch + 24); str += (ch + 14); str += (ch + 20); str += ' ';
    str += (ch + 13); str += (ch + 4); str += (ch + 4); str += (ch + 3); str += ' ';
    str += (ch + 8); str += (ch + 19); str += "?!";
    const int gamma = 0x9D;
    gammaEnDecrypt(str.begin(), str.end(), gamma);
    
    int g;
    std::cin >> g;
    gammaEnDecrypt(str.begin(), str.end(), g);
    
    std::cout << str << std::endl;
    
    return 0;
}
1
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.12.2011, 12:53 12
Цитата Сообщение от Сольвейг Посмотреть сообщение
Для того, чтобы сложить, мне же всё равно нужно как-то вывести вместо буквы её индекс в массиве.
Я не понимаю как.
символы хранятся в виде кодов, там уже число.
0
Заблокирован
11.12.2011, 12:53 13
Цитата Сообщение от Deviaphan Посмотреть сообщение
В С++ нет векторных операторов. Вообще. И векторного оператора ^ нету, а битовый оператор ^ есть.
Цитата Сообщение от alkagolik Посмотреть сообщение
Векторная операция ^
Цитата Сообщение от Deviaphan Посмотреть сообщение
А в математике нет никаких байтов.
верно, есть вектор, а байт == вектор.
0
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 16
11.12.2011, 12:59  [ТС] 14
Цитата Сообщение от soon Посмотреть сообщение
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
#include <iostream>
#include <cstring>
 
void gammaEnDecrypt(std::string::iterator begin, std::string::iterator end, const int gamma)
{
    for( ; begin != end; ++begin)
        *begin ^= gamma;
}
    
int main()
{
    std::string str;
    char ch = 'a';
    str += (ch); str += (ch + 13); str += (ch + 3); str += ' ';
    str += (ch + 24); str += (ch + 14); str += (ch + 20); str += ' ';
    str += (ch + 13); str += (ch + 4); str += (ch + 4); str += (ch + 3); str += ' ';
    str += (ch + 8); str += (ch + 19); str += "?!";
    const int gamma = 0x9D;
    gammaEnDecrypt(str.begin(), str.end(), gamma);
    
    int g;
    std::cin >> g;
    gammaEnDecrypt(str.begin(), str.end(), g);
    
    std::cout << str << std::endl;
    
    return 0;
}
Программа не запускается, выдаёт много ошибок
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.12.2011, 12:59 15
Цитата Сообщение от alkagolik Посмотреть сообщение
байт == вектор

Не по теме:

Не совсем. Если рассматривать векторные пространства, то, например множество непрерывных функций на отрезке [a,b] является векторным пространством, где вектор - функция и т.д.:)

0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.12.2011, 13:05 16
Цитата Сообщение от Сольвейг Посмотреть сообщение
Программа не запускается, выдаёт много ошибок
1) Уверены, что на С++?
Код для Си
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void gammaEnDecrypt(char* begin, const int gamma)
{
    for( ; *begin; ++begin)
        *begin ^= gamma;
}
    
int main(void)
{
    char str[] = "lalalalalalal";
    const int gamma = 0x9D;
    gammaEnDecrypt(str, gamma);
    
    int g;
    scanf("%d", &g);
    gammaEnDecrypt(str, g);
    
    printf("%s", str);
    
    return 0;
}

2) Ошибки приведите.
0
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2011, 13:06 17
Цитата Сообщение от soon Посмотреть сообщение
2) Ошибки приведите.
#include <cstring>
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.12.2011, 13:08 18
soon, в большинстве случаев стараются гамму сделать не периодической, чтобы вскрыть шифр было почти невозможно. Данный шифр, заявленный в первом посте, называется шифром Вернама
0
Заблокирован
11.12.2011, 13:10 19
Цитата Сообщение от Thinker Посмотреть сообщение
не периодической
раскройте пожалуйста
0
Делаю внезапно и красиво
Эксперт С++
1312 / 1227 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.12.2011, 13:12 20
Цитата Сообщение от Thinker Посмотреть сообщение
в большинстве случаев стараются гамму сделать не периодической
Тут период равен вообще единице.)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2011, 13:12
Помогаю со студенческими работами здесь

Шифрация методом простой замены
Такая проблема-недавно начал осваивать билдер, уже 5 часов туплю. Задача: есть два алфавита и...

Шифрация и дешифрация упаковкой рюкзака (Криптография)
Помогите плиз написать код на плюсах Задание: Шифрация упаковкой рюкзака. Программа из трех...

Шифрация
2 процедуры: первая шифрует прибавляя к ordery символа ключ+3 вторая дешифрует.. размерность в 256...

шифрация пароля
сделал программу которая записывает данные в sql базу на delphi. но такая неудача - пароль...

Шифрация Трафика
Всем привет, помогите пожалуйста с проблемой, уже неделю не могу решить. Имеется сервер онлайн...

Шифрация и дешифрация пароля
Здравствуйте! Есть такой вопрос нужно зашифровать пароль который хранится в таблице БД... Есть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru