Advertisement
Guest User

Untitled

a guest
Apr 25th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #pragma once
  2.  
  3. template<int _strlen>
  4. class xorstring
  5. {
  6. public:
  7. xorstring(bool bNewString, int key, ...)
  8. {
  9. va_list alist;
  10. va_start(alist, key);
  11. unsigned int DWORDCOUNT = (_strlen - (_strlen % 4)) / 4;
  12.  
  13. if (_strlen % 4)
  14. ++DWORDCOUNT;
  15.  
  16. for (unsigned int i = 0; i < DWORDcount; ++i) //store all DWORDs in the table
  17. table[i] = va_arg(alist, unsigned DWORD);
  18.  
  19. unsigned DWORD tmp;
  20. for (unsigned int i = 0; i < DWORDcount; ++i)
  21. {
  22. for (int ch = 0; ch < 4; ++ch)
  23. {
  24. tmp = table[i] >> (24 - (ch * 8));
  25. tmp &= 255;
  26. tmp ^= key;
  27. chString[(i * 4) + ch] = static_cast<char>(tmp);
  28. key += 3;
  29. key %= 256;
  30. }
  31. }
  32.  
  33. chString[_strlen] = 0; // add null terminator.
  34.  
  35. if (bNewString){
  36. string = new char[_strlen + 1];
  37. for (int i = 0; i < (_strlen + 1); ++i) //memcpy(string, chString, _strlen + 1) could be used.
  38. string[i] = chString[i];
  39. }
  40. va_end(alist);
  41. }
  42.  
  43. char chString[(_strlen + 1)];
  44. char *string; // heap pointer if needed
  45.  
  46. operator char*(void) if (bNewString){ return string; }
  47. else { return chString; };
  48.  
  49.  
  50. private:
  51. unsigned DWORD table[(_strlen / 4) + 1];
  52.  
  53.  
  54. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement