7
我正在开发适用于iOS的ePub阅读器。我从服务器上下载的ePub文件使用XOR算法进行加密。我使用密钥将这些文件作为.xlsx格式进行解密。我正在解密并将文件加载到阅读器中,如下所示:iOS中的异或文件加密
- 从下载的目录加载文件作为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路径,它不是空的,甚至检查文件是否存在路径。文件存在于指定的路径中。
我可能会出错???任何帮助将不胜感激。提前致谢。
是不是这个UB:'* dataPtr = * dataPtr ++^* keyPtr ++;'? – 2012-07-30 16:06:45
@PaulR:对不起......我没有得到UB的实际情况......你能解释一下吗? – PETER 2012-07-30 17:07:23
请参阅http://en.wikipedia.org/wiki/Sequence_point,了解序列点的说明以及规则断开时的未定义行为。 – 2012-07-30 17:10:23