0

使用 aes128 解密有效负载后,我得到一个NSData对象作为回报:

NSData *returnData = [ciphertext AES128DecryptWithKey:keyData withIV:ivData];

当我尝试NSLog这样做时,我得到以下十六进制输出:

<2db88b73 d84599a1 5779c736 09c975b7 92750cf2 d11cb41b 19f13781 4401bc57 b2ad96c8 402e3ccf 851c0219 00aec76b>

然后我尝试将其设置为 NSString:

[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog()在字符串上使用时,我得到"(null)"输出。

有人能告诉我为什么以及我应该在哪里寻找问题吗?

4

1 回答 1

1

前段时间碰到同样的问题,在这里找到答案。

如果数据不是以 null 结尾的,则应使用 -initWithData:encoding:

NSString* newStr = [[[NSString alloc] initWithData:theData
                                     encoding:NSUTF8StringEncoding] autorelease];

如果数据以 null 结尾,则应改为使用 -stringWithUTF8String: 以避免末尾的额外 \0。

NSString* newStr = [NSString stringWithUTF8String:[theData bytes]];

(如果您启用了 ARC,请删除 -autorelease 调用。)

于 2013-06-07T18:19:01.703 回答