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

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

Восстановить пароль Регистрация
 
MaRIYA18
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 16:37     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #1
Мне нужно создать программу шифрования или дешифрования с помощью алгоритма "исключающее ИЛИ".
Нашла что-то подобное,но при вводе х(любое слово) и ключа(любая цифра) программа у меня вылетает и пишет ошибку программа завершилась с кодом 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;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 16:37     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"
Посмотрите здесь:

C++ Обчисление введенной строки любого формата(пример:"(2+3)/4*2"или"2+3"или ...)
C++ Произвести шифрование с использованием поразрядной операции «исключающее или»
"Точность вычислений" или "Элементарная погрешность" C++
Шифрование-Дешифрование - После дешифрования, текст "сползает" со своих мест C++
C++ Логическая операция "Исключающее Или"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
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++;
    }
}
MaRIYA18
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 16:53  [ТС]     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #3
А это куда именно его вставить?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.05.2014, 16:57     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #4
MaRIYA18, ты С++ знаешь? понимаешь код, который тебе написали? Что он делает? Вот разберись в нём, сравни с тем, что у тебя было.
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
06.05.2014, 16:58     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #5
В функцию Shifr.
В твоей реализации сомнительна строка 11 - и инкремент и обращение по указателю одновременно.
MaRIYA18
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 17:01  [ТС]     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #6
Kuzia domovenok, с++ знаю, но не настолько хорошо что бы "шарить" в нем. Поэтому и написала в тему с++ для НАЧИНАЮЩИХ)

Добавлено через 19 секунд
nmcf, спасибо,сейчас попробую))
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
06.05.2014, 17:02     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #7
Только key не должен быть пустой строкой, иначе зациклится. Этот случай надо отдельной проверкой обрабатывать.
MaRIYA18
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 17:15  [ТС]     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #8
а теперь почему-то после ввода ключа он замалкивает,и больше ничего не нажимается и не запрашивает. но пишет что ошибок нет..
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
06.05.2014, 17:20     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #9
После кодирования могут получиться неотображаемые символы, поэтому выводить их непосредственно не стоит. Используй для вывода шестнадцатеричное представление.
MaRIYA18
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 он применяет шифрование с отдельными цифрами..надеюсь вы меня поняли =))
MaRIYA18
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 22
06.05.2014, 22:51  [ТС]     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #11
что бы можно было к каждой букве присвоить букву в алфавите после И..у которых номер это двухзначное число..
Миниатюры
Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"  
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
06.05.2014, 23:04     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #12
Не понял. Ты шифруешь символы другими символами используя их коды. Как надо по-другому?
newbie666
Заблокирован
06.05.2014, 23:13     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #13

Не по теме:

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



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

Добавлено через 4 минуты
newbie666, всё то,что вы написали я знаю. И описала сообщением выше. Возможно, что мы недопонимаем друг друга. Я всего лишь хочу понять,как мне присвоить в коде двухзначное число каждой букве..
newbie666
Заблокирован
06.05.2014, 23:35     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #15
Цитата Сообщение от MaRIYA18 Посмотреть сообщение
как мне присвоить в коде двухзначное число каждой букве..
я не смотрел на код, мне лень, но если я правильно понял, то:
C++
1
2
char a = 'X';
a = 99;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 07:58     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"
Еще ссылки по теме:

C++ Разработка прикладной программы "Шифрование" (методом Цезаря)
"Чудеса типа float" или "Куда девалась информация?" C++
Нужно сделать так, чтобы при вводе числа, выводило "рублей" или "рубль" C++

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

Или воспользуйтесь поиском по форуму:
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
07.05.2014, 07:58     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ" #16
Вместо символов их номера использовать, что ли? Опиши на примере.
Yandex
Объявления
07.05.2014, 07:58     Шифрование и дешифрование с использованием алгоритма "исключающее ИЛИ"
Ответ Создать тему
Опции темы

Текущее время: 13:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru