修复个矫情的Bug

有时候蛋疼的bug总是出现在恰当的时候,本可以早点下班耍耍,却被一个蛋疼的bug拽住了,想走可没那么容易!

具体的bug代码如下:

- (NSString *)playBackUrlWithPart:(PartInfo *)part{
    
    // 一个经过解密直播回放的url
    NSString *playback = part.playback_url;
    
    NSLog(@"playback = %@",playback);
    
    // 拼接用户信息
    playback = [playback stringByAppendingString:@"用户信息"];
    
    NSLog(@"playback = %@",playback);
    
    // 返回结果
    return playback;
}

是的就是一个简单拼接String的方法,怎么会出现bug,让我们Run起来看下打印信息:

2017-07-11 20:47:29.637 BugTest[12350:9597938] playback = http://view.csslcloud.net/api/view/callback?roomid=AEB2E52D3E169D989C33DC5901307461&userid=CF5928368147E4E3&liveid=19C2B5DD5BD6FB90

2017-07-11 20:47:29.637 BugTest[12350:9597938] playback = http://view.csslcloud.net/api/view/callback?roomid=AEB2E52D3E169D989C33DC5901307461&userid=CF5928368147E4E3&liveid=19C2B5DD5BD6FB90

前后打印的信息一模一样,难道是 -stringByAppendingString:出了问题?结果我把所有的有关的NSString API都用了遍,连 NSMutableString 都用上了,然并软!

Xcode的缓存?shift+command+option+k clean下,没用,重启xcode,删除APP,run一下还是没用,怎么可能,这难道是iOS SDK 有问题。这是什么bug,旁边同事来了一句,你应该去找乔布斯烧个香拜一拜,说不定这个bug就没了😓!什么鬼!

我打了几个断点,然后把光标移动到playback变量上,好像看到了什么:\0\0\0\0\0\0\0\0\0\0\0\0\0

http://view.csslcloud.net/api/view/callback?roomid=AEB2E52D3E169D989C33DC5901307461&userid=CF5928368147E4E3&liveid=19C2B5DD5BD6FB90\0\0\0\0\0\0\0\0\0\0\0\0\0

'\0\0\0\0\0\0\0\0\0\0\0\0\0' 后面接了13个'\0',没有被打印出来,而playback是AES 128 CBC no padding解密来的,难道是解密的问题,google了下,确实是AES加解密的问题。

AES加解密又一个愿数据不够16个字节补齐的问题,采用pkcs7和pkcs5的加密方式,末端添加的数据可能是0x1,0x2,0x3不固定的补齐,no padding的方式则末端都是'\0'!原来如此!渣渣的我,怎么会在解密的时候忘记把末尾的'\0'去掉!

去掉String末尾的'\0'代码如下:

/*
    method 去除decodedString末尾'\0'
    params decoded 解密后的字符串
*/

+(NSString *)processDecodedString:(NSString *)decoded{
    // empty 判断
    if( decoded==nil || decoded.length==0 ){
        return nil;
    }
    
    // NSString 转换成 char *
    const char *charStr = [decoded UTF8String];

    // 计算非'\0'字符的长度
    int i=0;
    while( charStr[i]!='\0' )
    {
        i++;
    }
    
    // 截取 charStr 
    NSString *result = [[NSString alloc] initWithBytes: charStr length:i encoding:NSUTF8StringEncoding];
    
    // 返回结果
    return result;
}

经过以上处理后,让我们在run一下看下打印结果:

2017-07-11 21:17:50.162 BugTest[12350:9597938] playback = http://view.csslcloud.net/api/view/callback?roomid=AEB2E52D3E169D989C33DC5901307461&userid=CF5928368147E4E3&liveid=19C2B5DD5BD6FB90

2017-07-11 21:17:50.162 BugTest[12350:9597938] playback = http://view.csslcloud.net/api/view/callback?roomid=AEB2E52D3E169D989C33DC5901307461&userid=CF5928368147E4E3&liveid=19C2B5DD5BD6FB90用户信息

解决了,嘴角瞬间泛起了微笑😄!

总结

  • NSString 如果末尾有多个'\0',操作NSString会出问题。
  • AES解密需要把末端多余的字符去掉,不同的AES加密方式,处理也不同。
  • 遇到bug问题,首先找自身代码的问题,代码是不会欺骗你的。
  • 写好每一行代码,你不找它,它也会回来找你的。

相关链接:

IOS 与 PHP 通信加密,使用AES 128 CBC no padding

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容