Ver Mensaje Individual
  #34  
Antiguo 14-11-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita