【问题标题】:How to split bytes from NSData?如何从 NSData 中拆分字节?
【发布时间】:2017-04-07 04:48:42
【问题描述】:

所以.. 我已经加密了来自服务器的需要解密的数据,以便我可以获得完整的响应 JSON。问题是我需要拆分前 16 个字节的数据以获取 IV 进行解密,其余字节是加密数据。我尝试了以下方法:

NSData *wholeData = [[NSData alloc] initWithBase64EncodedString:@"IYSaYh92saFT5t/ueQQtlTaFT1oW33FXPLDUsRMATBLUrY/6Z1VGK1KFmyeRwHpbi85T7ZNzDQAl5v8cu60DcJLwVQDI6KdwbmCq0+L62IM7Ixw60+G8gTkm+6+MLtyE" options:0];

NSData *d1 = [wholeData subdataWithRange:NSMakeRange(0, 16)];
NSData *d2 = [wholeData subdataWithRange:NSMakeRange(17, wholeData.length)];

NSData *enc = d2;
NSData *key = [[NSData alloc] initWithBase64EncodedString:@"alskd81039aisdf/tusd8341iasldkjfY=" options:0];
NSData *enciv = d1;

NSData *decrypted = [FBEncryptorAES decryptData:enc key:key iv:enciv];

然后我得到以下错误:

由于未捕获的异常“NSRangeException”而终止应用,原因:“*** -[NSConcreteData subdataWithRange:]:范围 {17, 96} 超出数据长度 96”

如何解决我的问题?

【问题讨论】:

    标签: ios objective-c iphone byte nsdata


    【解决方案1】:
    NSData *d2 = [wholeData subdataWithRange:NSMakeRange(17, wholeData.length - 17)];
    

    【讨论】:

    • 什么都一样,我忘了减少全部金额。感谢您的回答
    • 我猜这里的 17 代表字节?
    【解决方案2】:

    你可以试试这个

     NSData* blob;
        NSUInteger length = [blob length];
        NSUInteger chunkSize = 100 * 1024;
        NSUInteger offset = 0;
        do {
            NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
            NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[blob bytes] + offset
                                                 length:thisChunkSize
                                           freeWhenDone:NO];
            offset += thisChunkSize;
            // do something with chunk
        } while (offset < length);
    

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 2011-09-15
      • 2010-09-06
      • 2020-12-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多