7
iOS用のePubリーダーを開発しています。サーバーからダウンロードしているePubファイルは、XORアルゴリズムを使用して暗号化されています。私はそれらのファイルを解読するための鍵を持つ.xlsx形式にしています。私は解読して、次のようにファイルを読み込みます。iOSでのXORファイルの暗号化
- ダウンロードしたディレクトリからファイルをNSDataとしてロードします。
- キーを使用してデータを復号化する。
- 解読されたデータを一時ディレクトリに書き込む。
- ファイルを一時ディレクトリからリーダーにロードします。
私はファイルをロードするためにAePubReaderを使用しています。ここで
は、復号化コードです:
- (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;
}
しかし、私は読者に復号化されたファイルをロードしようとしていたときに、以下のように、私はエラーを取得しています:
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:
私がチェックしurlパス、空ではなく、pathにファイルが存在するかどうかをチェックします。指定されたパスにファイルが存在します。
私は間違っているかもしれませんか?どんな助けもありがとうございます。前もって感謝します。
これはUBではありません: '* dataPtr = * dataPtr ++^* keyPtr ++;'? –
@PaulR:申し訳ありません。実際にあなたがUBに言われたことを得られませんでした。もう少し説明していただけますか? – PETER
シーケンスポイントの説明と、ルールが破られたときの未定義の動作については、http://en.wikipedia.org/wiki/Sequence_pointを参照してください。 –