将nsstring转换为nsdictionary时结果为null

时间:2016-07-21 08:27:36

标签: ios objective-c json nsstring nsmutablestring

我从服务器加密了这样的字符串:

  

4gtFiu1DVK2MKGHcFtbuR4spdrhAixptPH0wz2n2VlawBWKlDE / I9m1K4GsBdBH8MJuzhiVHvQy0PYvvcCWuQv6dE1OHzflW3mN3jbEVLrodXvZVnafyo8Lmn6i2x4gGh3XB + ij59FvOOklM + D3E5mhwIFO0cZxGE0eAx2Gn9tj1euoMIChLhnD / FtvuKoucQBCKTTBfihu7dVdZ + gLxqsmusZqUeHnIYYrg3kpH2gu0wQ2GiKm / UMoogYR0JRoYac5ui / aVeDWS14bLoqAc4vJVWVt + vJhJG + a8rC5B68raUDaxhhCJM0b6lpOqAJ / 5iVZKLufYMLv2FMNoc5LFkP5QNAYneYCkhfWfNzcDgYC0biYQsT1uIfSgN2q86Qdghe9OBMBFfisfaEsg8 + qI7JxhNh + eA6tU5W / yJTIckhvk =

这是我解密该加密字符串的代码:

- (NSString *)decryptAES:(NSString *)text {
NSDictionary *keyDict = [self chooseKey:text];
NSString *key = [keyDict objectForKey:@"key"];
NSData *keyHash = [[key dataUsingEncoding:NSUTF8StringEncoding] SHA256Hash];

NSString *newText = [text stringByReplacingCharactersInRange:NSMakeRange(1, 1) withString:@""];
NSData *encryptData = [NSData base64DataFromString:newText];
NSData *plainData = [encryptData AES256Decrypt:keyHash];
NSString *plain = [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];

return plain;
}

我已成功将加密的字符串解密为NSString,结果为:

{
    "promo": [{
        "status": 1,
        "link": "https://www.s6pay.com/asset_template/img/promo/sspquizpromo.jpg",
        "description": "SSP mengadakan quiz yang berhadiah tiket kereta api dengan menjawab kuis.",
        "promoMessage": "Success",
        "promoTitle": "SSP Promo Quiz! Bagi-bagi Tiket Kereta Api"
    }],
    "count": 1
}

我想将解密字符串转换为NSDictionary / json,我的代码如下:

NSMutableString *plainTemp = [NSMutableString stringWithString:[[NSData alloc] decryptAES:jsonMutableString]]
NSLog(@"Decrypt %@",plainTemp);
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[plainTemp dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSLog(@"JSON %@",json);

我正在尝试使用NSJSONReadingMutableLeaves,NSJSONReadingAllowFragments或NSJSONReadingMutableContainers更改选项,但仍然给出结果JSON(null)。

我正在尝试使用http://json.parser.online.fr检查解密的字符串(加密字符串的结果),结果是有效的JSON。

我的代码出了什么问题?你能帮我么?谢谢..

2 个答案:

答案 0 :(得分:0)

  

我已成功将加密的字符串解密为NSString和   结果是:

这是真的NSString对象吗?为什么格式化这么好?如果它是真的NSString,你不应该遇到转换问题,只需使用:

NSError *jsonError;
NSData *objectData = [sourceString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&jsonError];

否则,您应该发布更多有关解密字符串的详细信息。

答案 1 :(得分:0)

大家好我已经得到了我的问题的答案,我正在使用这个

NSString* string = [[[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] stringByReplacingOccurrencesOfString:@"\t" withString:@""] stringByReplacingOccurrencesOfString:@"\0" withString:@""];
data = [string dataUsingEncoding:NSUTF8StringEncoding];

来自https://stackoverflow.com/a/23321435/5742519以获得我的问题的答案。非常感谢你回答我的问题。