Ahora te explico un poco el algoritmo que he usado:
La encriptación Xor es fácil de implementar y es simétrica. La misma función y la misma clave sirven para encriptar y desencriptar.
Se basa en hacer una operación binaria XOR entre un dato y una clave. Piensa en este ejemplo binario:
Dato = 10001000
Clave = 01000100
10001000 XOR 01000100 = 11001100; Dato Encriptado
11001100 XOR 01000100 = 10001000; Dato Desencriptado
si ampliamos el nº de bits tendremos una operación XOR mas amplia... Esta rutina lo amplia a 8*8 = 64 bits.
Código:
void
Crypt(void *Source, int Size, char* Clave, int Mod)
{
BYTE *source = (BYTE*)Source; // Convierto el puntero Source a BYTE*
BYTE clave[8]; // Reservo para Clave 8 BYTES
int lClave = strlen(Clave); // Encuentro el tamaño de la clave si es una cadena
for(int n=0; n<8; n++) // Fuerzo a que la clave sea de 8 bytes máximo
clave[n] = Clave[n%lClave];
for(int n=0; n<Size; n++, Mod++){
source[n] ^= clave[Mod%8]; // Encripta hasta conseguir hacerlo con 8 bytes
// que es el tamaño establecido para la clave....
// ^ Es el operador XOR en C
}
}
Espero que así lo entiendas mejor.
Experimenta.
Saludos.