通过指针地址修改只读NSData是否安全?

时间:2014-04-14 12:35:31

标签: ios nsdata xor

我想对NSData执行XOR操作,如下所示,修改一个只读的NSData(非ARC)是否安全?我试过了,它确实有效。

    @implementation NSData (Additions)

    - (void)xorWithByteKey:(Byte)keyByte
    {
        char *curDataPtr = (char *)self.bytes;

        for (int x = 0; x < self.length; x++)
        {
            *curDataPtr = *curDataPtr ^ keyByte;
            curDataPtr++;
        }
    }

    @end

2 个答案:

答案 0 :(得分:1)

可以肯定地说这是一个绝对愚蠢的想法,会给你带来各种麻烦。对于初学者,猜猜如果你有一个原始的NSData对象并复制它会发生什么,然后尝试这个废话(如果它不首先崩溃)。我认为由此引起的任何损害都属于“故意”类别,这意味着您可能要对此负责。

答案 1 :(得分:1)

CFData source code看你正在做什么似乎安全。我快速搜索了_bytes的引用(这是你直接访问的内容),没有任何内容突然袭击我。

虽然你真的想冒风险依赖这样的实施细节吗?在您的代码中通过数据的NSMutableData副本进行修改是否过于昂贵?

与此类别一样(警告,未经测试):

@interface NSData (xoring)
- (NSData *) xorWithByteKey: (Byte) b ;
@end

@implementation NSData (xoring)

- (NSData *) xorWithByteKey: (Byte) b {

   NSMutableData * copy = [self mutableCopy] ;

   char *p = (char *)copy.bytes;

   for (NSUInteger i = 0, length = copy.length ; i < length; ++i) {
        Byte c = *p ;
        c ^= b ;
        *p++ = c ;
    }
    return copy ;
}

@end