2017-04-07 106 views
2

所以..我從服務器加密的數據需要解密,以便我可以得到完整的響應JSON。事情是我需要拆分前16個字節的數據來獲得解密的IV,其餘的字節是加密的數據。我嘗試下面的方法:如何從NSData分割字節?

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]; 

後來我有以下錯誤:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSConcreteData subdataWithRange:]: range {17, 96} exceeds data length 96'

如何解決我的問題?

回答

1
NSData *d2 = [wholeData subdataWithRange:NSMakeRange(17, wholeData.length - 17)]; 
+0

什麼是一樣的,我忘了降低整體量。謝謝你的回答 –

+0

我猜17這裏代表字節? – Supertecnoboff

0

你可以試試這個

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);