【问题标题】:XOR file encryption in iOSiOS 中的 XOR 文件加密
【发布时间】:2012-07-28 07:11:36
【问题描述】:

我正在为 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 路径,它不为空,甚至检查了路径中是否存在文件。文件存在于指定路径。

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

【问题讨论】:

  • 这不是 UB:*dataPtr = *dataPtr++ ^ *keyPtr++; 吗?
  • @PaulR : 抱歉..我没听懂你对 UB 的看法...你能解释一下吗??
  • 参见en.wikipedia.org/wiki/Sequence_point,了解规则被破坏时序列点和导致的未定义行为的解释。
  • 谢谢@PaulR ...我现在会检查它。

标签: objective-c ios nsfilemanager xor


【解决方案1】:

我解决了。正如保罗所说,问题在于:

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

我改成:

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

谢谢保罗。

【讨论】:

    猜你喜欢
    • 2019-03-11
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多