Mensaje    Asunto: Encriptación Xor de 64 bits Responder citando

Os dejo una función para encriptar y desencriptar un bloque de memoria.
El método es mediante xor binario con lo que la misma función encripta y desencripta.

Se pueden hacer encriptaciones parciales para escrituras parciales en ficheros.

La clave es de 64 bits y aunque se introduce en modo texto, no controla el fin de cadena '\0', con lo que se puede introducir cualquier cosa como clave.

Si la clave es de menos de 8 bytes la convierte a 8 bytes con un algoritmo de redundancia.

Si se escribe en disco el bloque de memoria encriptado, debe hacerse en modo binario, y llevar la cuenta de los múltiplos de 8 escritos para pasárselo a la rutina (Mod), así se pueden hacer encripaciones parciales.

Aquí está el código, muy simple:

Código:
// Rutina de encriptación Xor.
// La misma rutina encripta y desencripta.
// Clave clave en modo texto que se tratará como de 8 caracteres, 64 bits
// Mod es el módulo restante para encriptaciones parciales
// Si se encripta un buffer por partes, Mod = Size_encriptado%8
// donde Size_encriptado es el tamaño total de lo encriptado hasta ese momento.
// Mod corrige el punto de comienzo del nuevo bloque a encriptar.
// BYTE es unsigned char

void
Crypt(void *Source, int Size, char* Clave, int Mod)
{
   BYTE *source = (BYTE*)Source;
   BYTE clave[8];
   int lClave = strlen(Clave);
   for(int n=0; n<8; n++)
     clave[n] = Clave[n%lClave];

   for(int n=0; n<Size; n++, Mod++){
      source[n] ^= clave[Mod%8];
   }
}


Saludos.