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

Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"

06.05.2014, 16:37. Показов 6649. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно создать программу шифрования или дешифрования с помощью алгоритма "исключающее ИЛИ".
Нашла что-то подобное,но при вводе х(любое слово) и ключа(любая цифра) программа у меня вылетает и пишет ошибку программа завершилась с кодом 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
#include<iostream>
const int N = 1024;
 
void Shifr(char *x, char *key)
{
   char *pkey = key;
   while(*x)
   {
       if (*pkey == '\0')
          pkey = key;
       *x++ ^= *pkey++;
   }
}
int main()
{
char x[N], key[N];
    std::cout << "x = "; std::cin.getline(x, N);
    std::cout << "key = "; std::cin.getline(key, N);
    Shifr(x, key);
    std::cout << x << "\n";
    Shifr(x, key);
    std::cout << x << "\n";
    return 0;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2014, 16:37
Ответы с готовыми решениями:

Произвести шифрование с использованием поразрядной операции «исключающее или»
Помогите пожалуйста с задачкой! Считать две строки: «текст» и «ключ». Произвести шифрование с...

Шифрование/дешифрование указанного файла алгоритмом "Исключающее или"
Написать программу , которая кодирует и декодирует заданный файл ( имя файла и код задаются в...

Шифрование и дешифрование посредством алгоритма двойных перестановок
я не знаю, как правильно написать программу шифрования и дешифрования текстового файла с помощью...

Шифрование и дешифрование с использованием XOR
Друзья, скиньте xor программу шифрования и соответственное расшифровки, желательно чтоб програмка...

Шифрование/дешифрование методом Цезаря (с использованием процедур)
Написать программу для шифрования методом цезаря и дешифровать. Шифровать и дешифровувать в...

15
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.05.2014, 16:45 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
int i = 0;
int j;
while(x[i] != '\0')
{
    j = 0;
    while(key[j] != '\0' && x[i] != '\0')
    {
        x[i] ^= key[j];
        j++;
        i++;
    }
}
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 16:53  [ТС] 3
А это куда именно его вставить?
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
06.05.2014, 16:57 4
MaRIYA18, ты С++ знаешь? понимаешь код, который тебе написали? Что он делает? Вот разберись в нём, сравни с тем, что у тебя было.
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.05.2014, 16:58 5
В функцию Shifr.
В твоей реализации сомнительна строка 11 - и инкремент и обращение по указателю одновременно.
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 17:01  [ТС] 6
Kuzia domovenok, с++ знаю, но не настолько хорошо что бы "шарить" в нем. Поэтому и написала в тему с++ для НАЧИНАЮЩИХ)

Добавлено через 19 секунд
nmcf, спасибо,сейчас попробую))
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.05.2014, 17:02 7
Только key не должен быть пустой строкой, иначе зациклится. Этот случай надо отдельной проверкой обрабатывать.
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 17:15  [ТС] 8
а теперь почему-то после ввода ключа он замалкивает,и больше ничего не нажимается и не запрашивает. но пишет что ошибок нет..
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.05.2014, 17:20 9
После кодирования могут получиться неотображаемые символы, поэтому выводить их непосредственно не стоит. Используй для вывода шестнадцатеричное представление.
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 22:44  [ТС] 10
nmcf, в общем сделала так
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
#include<iostream>
const int N = 1024;
 
void Shifr(char* x, char* key)
{
   /*char* pkey = key;
   while(*x)
   {
       if (*pkey == '\0')
          pkey = key;
       *x++ ^= *pkey++;
   }*/
   for(int i=0; i<strlen(x); i++) 
   {
       x[i] ^= key[i % strlen(key)];
   }
}
int main()
{
    char x[N], key[N];
 
    std::cout << "x = "; 
    std::cin.getline(x, N);
 
    std::cout << "key = "; 
    std::cin.getline(key, N);
 
    Shifr(x, key);
    std::cout << x << "\n";
 
    Shifr(x, key);
    std::cout << x << "\n";
 
    getchar();
    return 0; 
}
всё заработало. но возник другой вопрос..
как мне сделать что бы при вводе ключа программа воспринимала цифры от 10 и более как единую. Ведь когда мы вводим ключ 12345 он применяет шифрование с отдельными цифрами..надеюсь вы меня поняли =))
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 22:51  [ТС] 11
что бы можно было к каждой букве присвоить букву в алфавите после И..у которых номер это двухзначное число..
Миниатюры
Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"  
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
06.05.2014, 23:04 12
Не понял. Ты шифруешь символы другими символами используя их коды. Как надо по-другому?
0
Заблокирован
06.05.2014, 23:13 13

Не по теме:

Как жаль что админы не слышать большую часть не новичков этого форума и не делают второй раздел, чтоб было два:
1. C++ Для начинающих
2. Помоги тупому студенту решить за него лабораторную
ну или как - то так... Что был раздел, где вопросы задают те, кто изучают С++ и был раздел халявщиков, которым С++ нахрен не сдался и просто нужно решить за них задачу для института за них нахалву



А теперь по теме. ТС. Твоё исключающее или называется XOR (ксор), шифровать им - это самое простое шифрование, которое только можно придумать, но и его хватает в некоторых случаях.
Как им шифровать? Очень просто. У тебя есть любая информация, не важно какая и не важно как ты её создаёшь или там заполняешь... Так же у тебя есть ключ. Так вот по своей исходной информации пробегаешься циклом и каждый её байт ксоришь (XOR) ключём (побайтово как бы), всё - ты зашифровал исходные данные. Для расшифровки делаешь тоже самое - зашифрованную информацию побайтово ксоришь ключом и получаешь расшифрованную информацию ... Ясно? (ну это в самом простом случае)
1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 23:26  [ТС] 14
nmcf, даже не знаю как объяснить на письме. Сам метод состоит в том,что берется какое то слово. К каждой букве этого слова присваивается ее номер в алфавите. Так же мы берем произвольный ключ с любыми порядковыми номерами. Но что бы их количество соответствовало количеству букв в слове. Переводим все это в двоичный код и применяем операцию xor. Что бы дешифровать зашифрованный текст нужно просто к результату опять применить операцию xor. Так вот в моей получившейся программе получилось что в ключе нельзя присвоить букве двухзначное число..или я что то сама недопонимаю

Добавлено через 4 минуты
newbie666, всё то,что вы написали я знаю. И описала сообщением выше. Возможно, что мы недопонимаем друг друга. Я всего лишь хочу понять,как мне присвоить в коде двухзначное число каждой букве..
0
Заблокирован
06.05.2014, 23:35 15
Цитата Сообщение от MaRIYA18 Посмотреть сообщение
как мне присвоить в коде двухзначное число каждой букве..
я не смотрел на код, мне лень, но если я правильно понял, то:
C++
1
2
char a = 'X';
a = 99;
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
07.05.2014, 07:58 16
Вместо символов их номера использовать, что ли? Опиши на примере.
0
07.05.2014, 07:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2014, 07:58
Помогаю со студенческими работами здесь

Шифрование и дешифрование кодом Цезаря с использованием классов
Доброго времени суток. Возможно у кого-то есть программа с шифрованием и дешифрованием кодом цезаря...

Выполнить шифрование и дешифрование текста с использованием магических квадратов
Выполнить шифрование и дешифрование текста с использованием магических квадратов. Магический, или...

Шифрование/дешифрование методом замены с использованием таблицы Ascii
помогите написать программу шифрования и дешифрования методом замены с использованием табл аски. с...

Выполнить шифрование и дешифрование текста с использованием ассоциативных магических квадратов
Помогите сделать, очень надо. Не понимаю как. Выполнить шифрование и дешифрование текста с...

Шифрование с использованием алгоритма о рюкзаке
День добрый. Такая проблема, как работает алгоритм рюкзака ясно понимаю, как заполнить его числами...


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

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

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