Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过指针地址修改只读NSData是否安全?_Ios_Nsdata_Xor - Fatal编程技术网

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

Ios 通过指针地址修改只读NSData是否安全?,ios,nsdata,xor,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++) {

我想对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
@实现NSData(添加)
-(void)xorWithByteKey:(字节)keyByte
{
char*curDataPtr=(char*)self.bytes;
对于(int x=0;x
可以肯定地说,这是一个绝对愚蠢的想法,会给你带来各种各样的麻烦。首先,猜猜如果你有一个原始的NSData对象并复制了它会发生什么,然后尝试这种胡说八道(如果它一开始没有崩溃的话)。我认为由此造成的任何损害都属于“故意”的范畴,这意味着你可能要承担个人责任

从一个角度看,你所做的似乎是安全的。我快速搜索了
\u字节
(这是您直接访问的内容)的引用,但没有发现任何问题

尽管如此,您真的想冒险依赖这样一个实现细节吗?在您的代码中,通过NSMutableData副本修改数据是否成本过高

与此类别相同(警告,未测试):

接口NSData(xoring) -(NSData*)xorWithByteKey:(字节)b; @结束 @实现NSData(xoring) -(NSData*)xorWithByteKey:(字节)b{ NSMutableData*copy=[self-mutableCopy]; char*p=(char*)copy.bytes; 对于(整数i=0,长度=copy.length;i
@结束

@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 ;
}