🧙Конкурс сказок!
C++/C++11
(OFF) Vova9915 15 окт 2018

XOR

Как зашифровать текст с помощью xor на С++? Очень давно не использовал его и забыл как реализуется.

Комментарии (4)

string XOR(string data, char key[])
{
string xorstring = data;
for (int i = 0; i < xorstring.size(); i++) {
xorstring[i] = data[i] ^ key[i % (sizeof(key) / sizeof(char))];
}
return xorstring;
}

int main()
{
char key[3] = { 'K', 'E', 'Y' };
string data = XOR("virtual", key);
cout << data;
getchar();
return 0;
}
Кодируется слово "virtual" в данном случае
протестировал ваш пример у вас имеется ошибка:
вот тут key[i % (sizeof(key) / sizeof(char))];
у меня при любом размере key равен четырём. значит вот эта операция (sizeof(key) / sizeof(char))
вычисляет размер указателя( CPU у меня 32 bit ) а не всего массива.
проверил так и есть.
если вычислять внутри функций выходит любой размер массива key равен четырем. тоесть размеру указателя а не массива.

вот код теста.


#include <cstdio>
#include <cstring>

char *XOR( const char *data, char key[])
{
int szData = strlen( data );
int szKey = ( sizeof(key) / sizeof(char));

char *xorstring = new char [ szData + 1 ];

for( int i = 0; i < szData; ++i)
{
xorstring[i] = data[i] ^ key[i % szKey ];
std::printf(" szKey = %d | index = %d\n", szKey, i % szKey );
}

return xorstring;
}

char *XOR2( const char *data, const char *key )
{
int szData = strlen( data );
int szKey = strlen( key );

char *xorstring = new char [ szData + 1 ];

for( int i = 0; i < szData; ++i)
{
xorstring[i] = data[i] ^ key[i % szKey ];
std::printf(" szKey = %d | index = %d\n", szKey, i % szKey );
}

return xorstring;
}


void tst( char p[] )
{
std::printf("size - %d\n", sizeof( p ));

}


int main()
{
char key[] = { 'K', 'E', 'Y', 'S', 'U', 'P' };
char key2[] = { "SALAMANDRA" };

char *data = XOR("virtual", key);
char *data2 = XOR2( "virtual", key2 );

std::printf("%s\n", data );
std::printf("%s\n", data2 );

printf("size - %d\n", (sizeof(key) / sizeof(key[0])));
tst(key);

return 0;
}
Спасибо за поправку,извиняюсь за ошибку
Показать комментарий
Скрыть комментарий
Для добавления комментариев необходимо авторизоваться
C++/C++11
Флибустьеры
Грабь корабли! Побеждай монстров! Создавай уникаль...
Тема: Светлая | Тёмная
Версия: Mobile | Lite | Touch | Доступно в Google Play