Sto sviluppando un lettore ePub per iOS. I file ePub che sto scaricando dal server sono crittografati usando l'algoritmo XOR. Sto ottenendo quei file in formato .xlsx con la chiave per decodificarlo. Sto decrittando e caricando il file sul lettore come segue:Codifica file XOR in iOS
- Carica il file come NSData dalla directory scaricata.
- Decifrare i dati con il tasto.
- Scrittura dei dati decrittografati in una directory temporanea.
- Carica il file dalla directory temporanea al lettore.
Sto utilizzando AePubReader per caricare il file.
ecco il codice di decrittazione:
- (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;
}
Ma quando sto cercando di caricare il file decifrato al lettore, sto ottenendo un errore come segue:
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:
ho controllato per la percorso url, non è vuoto e controlla anche se il file esiste sul percorso. Il file esiste nel percorso specificato.
Dove potrei sbagliare ??? Qualsiasi aiuto sarà apprezzato. Grazie in anticipo.
Non è questo UB: '* dataPtr = * dataPtr ++^* keyPtr ++;'? –
@PaulR: Scusa ... non ho ottenuto quello che effettivamente tieni da UB ... potresti spiegare un po 'di più ?? – PETER
Vedere http://en.wikipedia.org/wiki/Sequence_point per la spiegazione dei punti di sequenza e il comportamento non definito risultante quando le regole sono interrotte. –