Ich entwickle einen ePub Reader für iOS. Die ePub-Dateien, die ich vom Server herunterlade, werden mit dem XOR-Algorithmus verschlüsselt. Ich bekomme diese Dateien als .xlsx-Format mit dem Schlüssel, um es zu entschlüsseln. Ich entschlüssle und lade die Datei zum Leser wie folgt:XOR Dateiverschlüsselung in iOS
- Laden Sie die Datei als NSData aus dem heruntergeladenen Verzeichnis.
- Entschlüsseln der Daten mit dem Schlüssel.
- Schreiben der entschlüsselten Daten in ein temporäres Verzeichnis.
- Laden Sie die Datei aus dem temporären Verzeichnis in den Reader.
Ich verwende AePubReader, um die Datei zu laden. Hier
ist der Entschlüsselungs-Code:
- (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;
}
Aber wenn ich versuche, die entschlüsselte Datei an den Leser zu laden, erhalte ich einen Fehler wie folgt:
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:
ich für das aufgegebene URL-Pfad, es ist nicht leer und sogar überprüft, ob die Datei im Pfad existiert. Die Datei existiert am angegebenen Pfad.
Wo ich vielleicht falsch liege ??? Irgendwelche Hilfe wird geschätzt. Danke im Voraus.
Ist das nicht UB: '* dataPtr = * dataPtr ++^* keyPtr ++;'? –
@PaulR: Sorry..Ich habe nicht bekommen, was du eigentlich von UB hast ... könntest du bitte etwas mehr erklären ?? – PETER
Siehe http://en.wikipedia.org/wiki/Sequence_point für die Erläuterung der Sequenzpunkte und des resultierenden Undefined Behavior, wenn die Regeln fehlerhaft sind. –