Estoy desarrollando un lector de ePub para iOS. Los archivos ePub que estoy descargando del servidor están encriptados usando el algoritmo XOR. Obtengo esos archivos como formato .xlsx con la clave para descifrarlo. Estoy descifrando y cargando el archivo al lector de la siguiente manera:Cifrado de archivos XOR en iOS
- Cargue el archivo como NSData del directorio descargado.
- Descifrar los datos con la clave.
- Escribir los datos descifrados en un directorio temporal.
- Cargue el archivo del directorio temporal al lector.
Estoy usando AePubReader para cargar el archivo.
Aquí está el código de descifrado:
- (NSData *)obfuscate:(NSData *)data withKey:(NSString *)key
{
NSMutableData *result = [data mutableCopy];
// Get pointer to data to obfuscate
char *dataPtr = (char *) [result mutableBytes];
// Get pointer to key data
char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];
// Points to each char in sequence in the key
char *keyPtr = keyData;
int keyIndex = 0;
// For each character in data, xor with current value in key
for (int x = 0; x < [data length]; x++)
{
// Replace current character in data with
// current character xor'd with current key value.
// Bump each pointer to the next character
*dataPtr = *dataPtr++^*keyPtr++;
// If at end of key data, reset count and
// set key pointer back to start of key value
if (++keyIndex == [key length])
keyIndex = 0, keyPtr = keyData;
}
return result;
}
Pero cuando estoy tratando de cargar el archivo descifrado para el lector, que estoy recibiendo un error de la siguiente manera:
2012-07-30 20:45:12.652 XYX[5986:12203] ERROR: ePub not Valid
2012-07-30 20:45:12.652 XYX[5986:12203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
*** First throw call stack:
he comprobado para el ruta url, no está vacía e incluso se comprueba si el archivo existe en la ruta. El archivo existe en la ruta especificada.
Donde podría estar yendo mal? Cualquier ayuda será apreciada. Gracias por adelantado.
¿No es esto UB: '* dataPtr = * dataPtr ++^* keyPtr ++;'? –
@PaulR: Lo siento ... No obtuve lo que realmente mentiste por UB ... ¿podrías explicarme un poco más? – PETER
Consulte http://en.wikipedia.org/wiki/Sequence_point para obtener una explicación de los puntos de secuencia y el comportamiento indefinido resultante cuando se rompen las reglas. –