iOS中的XOR文件加密

PET*_*TER 7 objective-c xor nsfilemanager ios

我正在为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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将解密的文件加载到阅读器时,我收到如下错误:

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:
Run Code Online (Sandbox Code Playgroud)

我检查了url路径,它不是空的,甚至检查文件是否存在于路径中.文件存在于指定的路径中.

我可能会出错的地方???任何帮助将不胜感激.提前致谢.

PET*_*TER 9

我解决了 正如保罗评论的那样,问题在于:

*dataPtr = *dataPtr++ ^ *keyPtr++;
Run Code Online (Sandbox Code Playgroud)

我改成了:

*dataPtr = *dataPtr ^ *keyPtr;
        dataPtr++;
        keyPtr++;
Run Code Online (Sandbox Code Playgroud)

谢谢保罗.