- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
void SaveEncryptedFile( const char *text, int len, const char* filename )
{
char* pEncryptedText = new char[strlen(text)+1];
string x1 = "you'll";
string x2 = "never";
string x3 = "get a";
string x4 = "password";
char l_pBuf[255];
sprintf(l_pBuf,"%d",30*11/3);
string result = x1+x2+x2+x1+l_pBuf+x3;
encryptString(text,pEncryptedText,result.c_str(),strlen(text),result.length()); // там внутри xor
FILE* pFile = fopen(filename, "wb");
if (pFile)
{
fwrite(pEncryptedText,sizeof(char),len,pFile);
fclose(pFile);
}
delete[] pEncryptedText;
}
Нашёл в рабочем проекте. Для "расшифровки" файла используется ещё одна такая же функция.
PragramistOtBoga 07.10.2013 18:34 # −18
Dummy00001 07.10.2013 18:52 # +1
ЗЫ да это просто обфускация данных что бы пользователи руками не лазили. до того как узнал про ROT13/etc, сам нечто подобное писал.
anonimb84a2f6fd141 07.10.2013 19:09 # 0
Stertor 07.10.2013 19:39 # −2
WGH 07.10.2013 19:41 # +2
anonimb84a2f6fd141 07.10.2013 21:39 # −1
WGH 07.10.2013 21:41 # +3
anonimb84a2f6fd141 07.10.2013 23:19 # +2
WGH 07.10.2013 23:39 # 0
anonimb84a2f6fd141 08.10.2013 00:41 # −1
WGH 08.10.2013 00:58 # +2
Если мне не изменяет память, "password" сперва неявно сконвертится к (временному) стрингу, после чего x4 сконструируется из этого стринга. Как максимум два раза вызовется конструктор, как минимум - один (стандарт допускает устранение копирования в таком случае).
anonimb84a2f6fd141 08.10.2013 06:37 # 0
Лол, а не указатель просто копируется?
bormand 08.10.2013 06:43 # +3
Ага, а потом ты пишешь s[0] = 'x' и БАБАХ!
P.S. Хотя в некоторых реализациях строк (но не в std::string) может и указатель копироваться. В Qt и c++ builder вроде бы так и делают, ибо один хрен copy-on-write.
anonimb84a2f6fd141 08.10.2013 17:06 # 0
Soul_re@ver 08.10.2013 17:20 # +2
Только std::string в COW не умеет, поэтому выделяет память и копирует данные при создании.
guest 11.10.2013 17:46 # −1
defecate-plusplus 11.10.2013 17:49 # +2
просто в -O2 это одно и то же
guest 11.10.2013 21:39 # 0
WGH 11.10.2013 22:06 # +1
(15.3), and brace-enclosed initializer lists (8.5.1) is called copy-initialization and is equivalent to the form
<...>
The semantics of initializers are as follows.
<...>
— If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of
the source type is the same class as, or a derived class of, the class of the destination, (прим. очевидно, что литерал const char * не является подклассом std::string) constructors are
considered. <...>
<...>
— Otherwise (i.e., for the remaining copy-initialization cases), user-defined conversion sequences that can
convert from the source type to the destination type or (when a conversion function is used) to a derived
class thereof are enumerated as described in 13.3.1.4, and the best one is chosen through overload resolution
(13.3).
То есть здесь происходит неявное преобразование const char * в std::string, дабы наш std::string x4 можно было бы инициализировать копированием.
guest 12.10.2013 12:36 # +1
crastinus 07.10.2013 21:42 # +3
string x1 = "you'll";
string x2 = "never";
string x3 = "get a";
string x4 = "password";
string result = x1+x2+x2+x1+l_pBuf+x3;
tirinox 07.10.2013 22:28 # +5
anonimb84a2f6fd141 08.10.2013 17:07 # 0
guest 11.10.2013 19:32 # 0
3.14159265 11.10.2013 20:59 # 0
Окончания еще не проходили?
Хорошо что на завтра уроки не надо делать, да?
anonimb84a2f6fd141 11.10.2013 21:55 # 0