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

Шифрование XOR не работает с кириллицей - C++

Восстановить пароль Регистрация
 
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
01.07.2014, 22:32     Шифрование XOR не работает с кириллицей #1
Проблема и никак не могу решить. Функция XOR возвращает
при исходной строке "съешь еще этих мягких мексиканских кактусов да выпей текилы":
"?????N???p????N??????G????????????E????????E??L?????E?????? @"

то есть не хочет читать кириллицу:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void XOR(char* lpPassword, unsigned char* lpResult)
{
    if(lpPassword[0]=='\0' || strlen(lpPassword)<=0) return;
    unsigned int i = 0, j = 0,lenth=strlen(lpPassword);    
    while (lpResult[i]!='\0')
    {  
        lpResult[i] ^= lpPassword[j];
    j++;
    if (j>lenth-1) 
        {
       j = 0;
        }       
        i++;        
    }
}
Должно быть что-то в роде: БЦрЯХNѾЬьpСзџЬNѷЪъѪєаGѕћѱФсѪќшЦѓіЎEуѠізФШѐѹEэѠLчЬіћѲEлѥіэќТ
Перепробовал подавать на вход все кодировки (сp1251, Unicode, UTF-7, UTF-8, UTF-32).

Может есть у кого-нибудь решение или другой простой способ шифрования данных?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2014, 22:32     Шифрование XOR не работает с кириллицей
Посмотрите здесь:

C++ Шифрование Xor'ом
Шифрование строк [Метод XOR] C++
Шифрование текста. XOR C++
Шифрование XOR не кодирует бинарные данные C++
Не выходит xor шифрование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
01.07.2014, 22:50     Шифрование XOR не работает с кириллицей #2
xor'у всё равно, кириллица там или что. В другом месте проблему ищи. Как вводишь и выводишь русский текст? И почему у тебя char и unsigned char?
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
01.07.2014, 23:07  [ТС]     Шифрование XOR не работает с кириллицей #3
Цитата Сообщение от nmcf Посмотреть сообщение
xor'у всё равно, кириллица там или что. В другом месте проблему ищи. Как вводишь и выводишь русский текст? И почему у тебя char и unsigned char?
вот так шифрую:
C++
1
2
3
char outInf[1024];  
sprintf(outInf,"%s","съешь еще этих мягких мексиканских кактусов да выпей текилы");
XOR(key,(unsigned char*)outInf);
C++
1
unsigned char
- это уже упражняюсь, надеялся поможет. У unsigned диапазон другой, бывает решает проблему с кириллицей.


если цифры или инглиш текст - кодирует и раскодирует на ура.
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,917
Записей в блоге: 1
01.07.2014, 23:10     Шифрование XOR не работает с кириллицей #4
Цитата Сообщение от 0makc Посмотреть сообщение
решение
Угу.
Вложения
Тип файла: 7z XOR.7z (5.3 Кб, 31 просмотров)
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
01.07.2014, 23:10     Шифрование XOR не работает с кириллицей #5
Так раскодирует или нет? Как результат смотришь? Отладчиком?
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
01.07.2014, 23:38  [ТС]     Шифрование XOR не работает с кириллицей #6
Цитата Сообщение от nmcf Посмотреть сообщение
Так раскодирует или нет? Как результат смотришь? Отладчиком?
результат я вижу в другой программе, которая перехватывает сообщения:

C++
1
return _snprintf(out,size-1,outInf);
Цитата Сообщение от gazlan Посмотреть сообщение
Угу.
Вложения
XOR.7z (5.3 Кб, 0 просмотров)
спасибо, сейчас посмотрю

Добавлено через 17 минут
Вот эта часть кода и есть шифрование:
C++
1
2
3
4
5
6
7
8
9
10
   do
   {
      for (DWORD ii = 0; ii < dwXorSizeLo; ++ii)
      {
         *(pSrcStr + dwSrcOfs++) ^= *(pXorStr + dwXorOfs++);
 
         dwXorOfs %= dwXorSizeLo;
      }
   } 
   while (dwSrcOfs < dwSrcSizeLo);
Только не понятно, что в ней происходит.

dwSrcSizeLo - размер файла, но у меня строка, тоже подойдет, будет длинна
pXorStr + dwXorOfs - это по ходу ключ
pSrcStr - сама строка, которую надо шифровать
dwSrcOfs - это не понятно.

впервые вижу запись ++ii . это как, равно ли ii++?
не понятно как именно меняется значение pSrcStr
FraidZZ
Модератор
 Аватар для FraidZZ
3879 / 1505 / 227
Регистрация: 06.01.2013
Сообщений: 4,029
Завершенные тесты: 1
01.07.2014, 23:42     Шифрование XOR не работает с кириллицей #7
Да, это префиксный инкремент. По сути, тот же ii+

Добавлено через 2 минуты
Только я бы строку
C++
1
*(pSrcStr + dwSrcOfs++) ^= *(pXorStr + dwXorOfs++);
для удобочитания заменил бы на
C++
1
pSrcStr[dwSrcOfs++] ^= pXorStr[dwXorOfs++];
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
02.07.2014, 00:00  [ТС]     Шифрование XOR не работает с кириллицей #8
Цитата Сообщение от FraidZZ Посмотреть сообщение
для удобочитания заменил бы на
Код C++
1
pSrcStr[dwSrcOfs++] ^= pXorStr[dwXorOfs++];
теперь понятно. как работает код. Но боюсь он мало чем отличается от моего:

C++
1
lpResult[i] ^= lpPassword[j];
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
02.07.2014, 00:19     Шифрование XOR не работает с кириллицей #9
Цитата Сообщение от 0makc Посмотреть сообщение
Функция XOR возвращает
Вот что видим в отладчике. Первый рис. - при 1-м вызове XOR() - видим результат шифрования. Рис.2 - второй вызов - сообщение расшифровано успешно.
C++
1
2
3
4
5
int main()
{
    XOR( pwd, msg );
    XOR( pwd, msg );
}
Миниатюры
Шифрование XOR не работает с кириллицей   Шифрование XOR не работает с кириллицей  
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
02.07.2014, 00:57  [ТС]     Шифрование XOR не работает с кириллицей #10
Цитата Сообщение от Alex5 Посмотреть сообщение
Вот что видим в отладчике. Первый рис. - при 1-м вызове XOR() - видим результат шифрования. Рис.2 - второй вызов - сообщение расшифровано успешно.
Функция работает, но тогда как может она не работать у меня? Может ли кодировка поменяться при этой операции? По идее нет. Но и идей у меня больше нет.
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
02.07.2014, 01:26  [ТС]     Шифрование XOR не работает с кириллицей #11
Спасибо за идею с отладчиком. Да. все работает.
Шифрование XOR не работает с кириллицей

Что-то происходит при отправке:

ответ сервера: ANS=????? ??? ???? ?????? ???????????? ???????? ?? ????? ??????

то есть я эту же строку отправляю и получаю ???..

Наверное читаю не в той кодировке.


Теперь отдельный вопрос:

если у меня ключ:
abcd

а строка:

Coca-cola

то буква "c" попадает на эту же "c" при XOR и в этом случае алгоритм перестает нормально работать. Как этого можно избежать?
gazlan
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,917
Записей в блоге: 1
02.07.2014, 05:33     Шифрование XOR не работает с кириллицей #12
Используйте любую подходящую bin-2-ascii конверсию: Base85, Base64, Base32.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
02.07.2014, 09:29     Шифрование XOR не работает с кириллицей #13
При совпадении букв получается ноль и интерпретируется как конец строки '\0'. Закодированный массив нужно рассматривать как бинарные данные, массив чисел char, а не как строку символов, длину по strlen() соответственно не определять.
0makc
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 9
02.07.2014, 13:27  [ТС]     Шифрование XOR не работает с кириллицей #14
Цитата Сообщение от gazlan Посмотреть сообщение
Используйте любую подходящую bin-2-ascii конверсию: Base85, Base64, Base32.
Спасибо, попробую.

Цитата Сообщение от nmcf Посмотреть сообщение
При совпадении букв получается ноль и интерпретируется как конец строки '\0'. Закодированный массив нужно рассматривать как бинарные данные, массив чисел char, а не как строку символов, длину по strlen() соответственно не определять.
Причина ясна - конец строки. Решение не использовать strlen()? а как иначе я узнаю длину?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2014, 14:18     Шифрование XOR не работает с кириллицей
Еще ссылки по теме:

C++ Шифрование текста алгоритмом Виженера не работает с кириллицей
XOR шифрование/дешифрование C++
C++ XOR шифрование

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

Или воспользуйтесь поиском по форуму:
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
02.07.2014, 14:18     Шифрование XOR не работает с кириллицей #15
Длину храни отдельно в какой-нибудь переменной.
Yandex
Объявления
02.07.2014, 14:18     Шифрование XOR не работает с кириллицей
Ответ Создать тему
Опции темы

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