7

iOS用のePubリーダーを開発しています。サーバーからダウンロードしているePubファイルは、XORアルゴリズムを使用して暗号化されています。これらのファイルを、復号化するためのキーを含む.xlsx形式で取得しています。次のように、ファイルを復号化してリーダーにロードしています。

  1. ダウンロードしたディレクトリからNSDataとしてファイルをロードします。
  2. キーを使用してデータを復号化します。
  3. 復号化されたデータを一時ディレクトリに書き込みます。
  4. 一時ディレクトリからリーダーにファイルをロードします。

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パスを確認しましたが、空ではなく、ファイルがパスに存在するかどうかも確認しました。指定したパスにファイルが存在します。

私が間違っているかもしれないところ???どんな助けでもありがたいです。前もって感謝します。

4

1 に答える 1

9

私はそれを解決しました。Paulがコメントしたように、問題は次のとおりでした。

*dataPtr = *dataPtr++ ^ *keyPtr++;

私はそれを次のように変更しました:

*dataPtr = *dataPtr ^ *keyPtr;
        dataPtr++;
        keyPtr++;

ポールありがとう。

于 2012-07-31T12:56:27.753 に答える