Witam serdecznie

Szukam pomocy w przeanalizowaniu fragmentu kodu programu "Zaszyfrowany dziennik" Program dodaje,modyfikuje i usuwa wpisy które są numerowane i datowane a na końcu zapisuje wszystko w zaszyfrowanej postaci. Ogólnie wiem na czym polega sam XOR ale nie wiem jak tu zostało to zaimplementowane...
Np
tekst do szyfr. - programowanie
klucz szyfr. - qwerty
tekst zaszyfr - [ 33, 37, 42, 53, 38, 48, 58, 42, 37, 53, 63, 62, 32, ]

Oto kody:
XoR.cpp

#include "../include/XoRCode.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;

// konstruktor


XoRCode::XoRCode():m(26)
{
  cKey="";
  key=0;
}

//funkcja szyfrujaca

const char * XoRCode::cCrypt(const char* str)
{
  //pomocnicza zmienna
  string mMesg(str);
  int cVal;
  int count=0;
  ostringstream ss; // Konwersje int na string; Nagłówek sstream

  tmp="";
  tmp+="[ ";
  for(int i=0;i<mMesg.length();++i)
    {
      if(count==cKey.length()-1)
	count=0;
      ss<<"";
      ss.flush();
      cVal=(((int)mMesg[i])^((int)(cKey[count])));
      ss<<cVal;
      tmp+=ss.str();
      tmp+=", ";
      count++;
	  ss.str("");
		ss.clear();	
            
    }
  tmp+=']';
  return tmp.c_str();
}

const char* XoRCode::dCrypt(const char *cMesg)
{
   //pomocnicza zmienna
  string mMesg(cMesg);
  int cVal;

  int count=0;
 

 tmp="";
 string number="";
for(int i=2;i<mMesg.length();++i)
{
	if(count==cKey.length()-1)
	count=0;
	if(mMesg[i]!=',')
		number+=mMesg[i];
	else
	{
		++i;
		istringstream ss(number); // Konwersje string na int
		ss>>cVal;
		cVal=(cVal^((int)cKey[count]));
		tmp+=(char)cVal;
		number="";
		++count;
	}
}
  return tmp.c_str();
}


void XoRCode::setKey(char* keys)
{
  string tmp;
  string mKey(keys);
  transform(mKey.begin(), mKey.end(),
	    mKey.begin(), ::toupper);//wykonuje podaną funkcję toupper dla argumentów ze zbioru (mKey.begin(), mKey.end()) i zapisuje wyniki 
		//do zbioru zaczynającego się w mKey.begin()
  
  if(mKey.length()<1)
    {
      throw string("Za krotkie haslo");
    }
  cKey=mKey;
}
 int XoRCode::countHash(const char* key)
{

	int sum=0;
	string mKey(key);
	 transform(mKey.begin(), mKey.end(),
	    mKey.begin(), ::toupper);  	
	for(int i=0;i<mKey.length();++i)
	 //sum+=((((long)pow(((int)mKey[i]-63),11))%2790003));
	 sum+=((((long)pow((double)((int)mKey[i]-63),11.0))%2790003));
	return (sum * (-1));
}
char* XoRCode::getDescr()
{
		return "XoR";
}
char* XoRCode::keyInfo()
{
	return const_cast<char*>("Wybrano: Algorytm XOR   Kluczem jest dowolny ciag liter");
}

XoRCode::~XoRCode()
{
} 

Xor.h

#ifndef XORCODE_H_
#define XORONCODE_H_
#include "Code.h"
#include <map>
#include <string>
using namespace std;
class XoRCode : public CodeClass
{
  //klucz
  string cKey;
  int key;
  //ilosc znakow w alfabecie
  int m;
  string mask;
  map<char,string> CodeMap;
  map<char,string>::iterator it;
  string tmp;
 public:
  XoRCode();
  const char* cCrypt(const char *);
  const char* dCrypt(const char *);
  void setKey(char*);
  int  countHash(const char*);
  char* getDescr();
  char* keyInfo();
  ~XoRCode();

};

#endif