escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 18 Ago, 2008 11:58 am Asunto: Encriptación Xor de 64 bits |
|
|
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. |
|