Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
 Аватар для uLong
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138

XOR шифрование

14.06.2015, 14:04. Показов 6143. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не хотел создавать ещё тему, но у меня не все гладко прошло с XOR шифрованием, не смотря на то, что там все просто. Не пойму с чем это связано, но в res 26 символов, а не 6 как в word. И ещё мне кажется я не верно написал шифрование, поправьте пожалуйста, если не затруднит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <iostream>
 
using namespace std;
 
string encode(char word[], char key[]) 
{
    char* res = new char[strlen(word)];
    
    for (int i = 0; i < strlen(word)-1; i++)
        res[i] = word[i] ^ key[i];
 
    return res;
 
}
 
int main()
{
    cout << encode("Andrew", "BsFGgE");
 
    while (true);
    return 0;
}
Вывод происходит каким-то странными символами (см. вложение).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2015, 14:04
Ответы с готовыми решениями:

XOR шифрование
Прошу написать мне алгоритм расшифровки проксоренного сообщения. Мне известно что длина ключа 3 символа, это латинские буквы нижнего...

Шифрование Xor'ом
Добрый день, уважаемые) тут такое дело, сел делать курсач и столкнулся с проблемой. Работа по шифрованию бинарными операциями и...

XOR шифрование
Задание:Написать программу на выбранном языке программирования, реализующую описанный выше алгоритм для шифрования содержимого текстового ...

17
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 14:10
C++
1
2
3
4
5
6
7
8
9
10
11
string encode(char word[], char key[]) 
{
    int len = strlen(word);
    char* res = new char[len + 1];
    
    for (int i = 0; i < len; i++)
        res[i] = word[i] ^ key[i];
 
    res[len] = '\0';
    return res;
}
0
-4 / 2 / 3
Регистрация: 30.05.2015
Сообщений: 37
14.06.2015, 14:32
Цитата Сообщение от uLong Посмотреть сообщение
Вывод происходит каким-то странными символами (см. вложение).
Что написали, то и получили. Нормальные символы это.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 14:41
Цитата Сообщение от uLong Посмотреть сообщение
Вывод происходит каким-то странными символами
Ну так они же зашифрованные.
0
 Аватар для uLong
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
14.06.2015, 14:56  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
res[len] = '\0';
Я просто забыл поставить нулевой байт ?
0
-4 / 2 / 3
Регистрация: 30.05.2015
Сообщений: 37
14.06.2015, 15:05
Цитата Сообщение от uLong Посмотреть сообщение
Я просто забыл поставить нулевой байт ?
Он вообще тут ненужен. Вы возвращаете string. Вот так можно:

C++
1
2
3
4
5
6
7
8
9
10
string encode(const char *word, const char *key)
{
    string result = "";
    int key_size = strlen(key);
    
    for(int i = 0; word[i]; i++)
        result += word[i] ^ key[i % key_size];
    
    return result;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 15:13
Цитата Сообщение от uLong Посмотреть сообщение
Я просто забыл поставить нулевой байт ?
Да.
И просто убрать -1 из 10-й строки.
И просто добавить +1 в 8-ю строку.

Добавлено через 55 секунд
Цитата Сообщение от kolobok919 Посмотреть сообщение
Он вообще тут ненужен.
В его коде он нужен. Не нужен он только в твоём примере.
0
-4 / 2 / 3
Регистрация: 30.05.2015
Сообщений: 37
14.06.2015, 15:15
Цитата Сообщение от castaway Посмотреть сообщение
В его коде он нужен. Не нужен он только в твоём примере.
Зачем использовать char, если все равно в результате будет string. Видимо, лучше сразу взять string и использовать его.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 15:20
Цитата Сообщение от kolobok919 Посмотреть сообщение
Зачем использовать char, если все равно в результате будет string. Видимо, лучше сразу взять string и использовать его.
Ход мыслей у тебя правильный, но почему ты тогда параметры функции не поменял на string?
Зачем переменной result присвоил "" ?
Если уж улучшать, то улучшать до конца.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.06.2015, 15:24
Цитата Сообщение от uLong Посмотреть сообщение
string encode(char word[], char key[])
И что случится, если word[j] = key[j] ?
1
-4 / 2 / 3
Регистрация: 30.05.2015
Сообщений: 37
14.06.2015, 15:26
Цитата Сообщение от castaway Посмотреть сообщение
Ход мыслей у тебя правильный, но почему ты тогда параметры функции не поменял на string?
Зачем переменной result присвоил "" ?
Если уж улучшать, то улучшать до конца.
Не поменял, так как у тебя входные типы были такие, а я не знаю каким образом ты используешь данную функцию. Переменной "result" присвоил значение для наглядности, но можно и без этого - конструктор по умолчанию создаст пустую строку автоматически.

Добавлено через 1 минуту
Цитата Сообщение от gazlan Посмотреть сообщение
И что случится, если word[j] = key[j] ?
К строке прибавится нулевой символ.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 15:31
Цитата Сообщение от kolobok919 Посмотреть сообщение
Не поменял, так как у тебя входные типы были такие, а я не знаю каким образом ты используешь данную функцию.
Я её никак не использую, она мне ни к чему, а вот ТС использует её так.

Цитата Сообщение от gazlan Посмотреть сообщение
И что случится, если word[j] = key[j] ?
Мне кажется что ничего особенного не случится. Или я чего то не понял? В чём подвох?
Получится 0 ? Ну так это нормально.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.06.2015, 15:54
Цитата Сообщение от castaway Посмотреть сообщение
Ну, так это нормально
В сочетании с strlen, например?

Не по теме:

IMHO, правильно было бы изначально оперировать с байт-буфером и явным размером.

1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 15:57
Цитата Сообщение от gazlan Посмотреть сообщение
В сочетании с strlen, например?
Я вас не понимаю. Можно объяснить без загадок!?
0
-4 / 2 / 3
Регистрация: 30.05.2015
Сообщений: 37
14.06.2015, 16:00
Цитата Сообщение от gazlan Посмотреть сообщение
IMHO, правильно было бы изначально оперировать с байт-буфером и явным размером.
Согласен, но у ТС другие входные параметры.

Добавлено через 37 секунд
Цитата Сообщение от castaway Посмотреть сообщение
Я вас не понимаю. Можно объяснить без загадок!?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.06.2015, 16:03
Цитата Сообщение от castaway Посмотреть сообщение
не понимаю
Из приведенного автором кода видно, что он рассматривает word и key как символьные типы. Подозреваю, что и результат шифрования он так же попытается использовать как символьный тип, получив неожиданные проблемы.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 16:05
Цитата Сообщение от gazlan Посмотреть сообщение
получив неожиданные проблемы.
Понял о чём вы. Сразу бы так и сказали.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
14.06.2015, 16:10
uLong, обработка должна контролироваться длиной последовательности. Вывод на экран необходимо производить в виде значений какой-нибудь системы счисления, например 16-чной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2015, 16:10
Помогаю со студенческими работами здесь

Шифрование xor
Пишу шифрование методом xor. На вход поступает строка, каждый символ строки преобразуется в соответствующий ASCII-код. Получаем вектор...

Не выходит xor шифрование
есть вот такой код string xorcrypt(const string&amp; str, const string&amp; key) { string retval; retval.resize(str.length()); for...

Шифрование текста. XOR
Помогите с шифрование текста...с числоми вроде получалось. Что значит эта ошибка и как ее испрвить?..) #include &lt;iostream&gt; ...

XOR шифрование/дешифрование
Всем привет. Пож-ста помогите написать программу, шифрующую/дешифрующую xor маску. 2 Примера : N1 из FF FF FF FF D2...

Шифрование XOR не работает с кириллицей
Проблема и никак не могу решить. Функция XOR возвращает при исходной строке &quot;съешь еще этих мягких мексиканских кактусов да выпей...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru