Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- template<int _strlen>
- class xorstring
- {
- public:
- xorstring(bool bNewString, int key, ...)
- {
- va_list alist;
- va_start(alist, key);
- unsigned int DWORDCOUNT = (_strlen - (_strlen % 4)) / 4;
- if (_strlen % 4)
- ++DWORDCOUNT;
- for (unsigned int i = 0; i < DWORDcount; ++i) //store all DWORDs in the table
- table[i] = va_arg(alist, unsigned DWORD);
- unsigned DWORD tmp;
- for (unsigned int i = 0; i < DWORDcount; ++i)
- {
- for (int ch = 0; ch < 4; ++ch)
- {
- tmp = table[i] >> (24 - (ch * 8));
- tmp &= 255;
- tmp ^= key;
- chString[(i * 4) + ch] = static_cast<char>(tmp);
- key += 3;
- key %= 256;
- }
- }
- chString[_strlen] = 0; // add null terminator.
- if (bNewString){
- string = new char[_strlen + 1];
- for (int i = 0; i < (_strlen + 1); ++i) //memcpy(string, chString, _strlen + 1) could be used.
- string[i] = chString[i];
- }
- va_end(alist);
- }
- char chString[(_strlen + 1)];
- char *string; // heap pointer if needed
- operator char*(void) if (bNewString){ return string; }
- else { return chString; };
- private:
- unsigned DWORD table[(_strlen / 4) + 1];
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement