iOS开发——字典的升序排列以及字符串拼接

在调用SDK包的时候,很多时候我们自己开发的第三方应用想要取得数据的时候得获得登陆令牌以及其他很多信息,比如accessToken等登陆令牌信息,而第三方SDK包往往会要求我们完成签名算法,我今天在项目中集成海康威视的网络摄像头时,就要求我必须完成签名算法才能获得信息,而签名算法的要求是这样子的。

  • 签名算法要求如下:
  • 第一步: 算出“签名原始串”= params中参数集合字符串(将所有字段按升序排列后,依次连接所有字段名及对应值)+ method(接口名字)+ time(UTC时间戳) +请求源secret。样式如下:“<attr>:<val>,…,<attr>:<val>, method:<val>,time:<val>,secret:<val>”
  • 第二步: 将“签名原始串”进行MD5校验,并转化为16进制的32位小写字符串,作为签名值sign。(注:编码格式为UTF-8)

所以这里我们分析,我们要完成的步骤如下,首先我们先讲集合内的字符串以升序排列,第二步我们依次按照规定的样式拼接字符串,最后我们把拼接好的字符串进行MD5校验,转化为16进制的32位小写字符串。

下面我们先从字典的升序排列开始说起,我先假定一个字典。

  NSDictionary *params = @{
                             @"name":@"LinH",
                             @"hometown":@"Dongying",
                             @"userID":@"330909199301271234",
                             @"phone":@"18814868888"
                             };

这个参数字典中一共有4个key:name、hometown、userID、phone。
我们该怎么样把这四个字符串按升序排列呢?

首先我们定义一个数组,存储字典中的所有key值:

NSArray *keyArray = [params allKeys];

接下来我们定义一个排序数组,存储排序好之后的key值

    NSArray *sortArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];

sortedArrayUsingComparator方法是苹果为我们提供的一个数组排序方法,利用block语法来完成排序功能。

而这时,我们排序好的key值,已经按顺序存储在sortArray数组中,这时我们再创建一个数组,来按升序存储key对应的Value,通过遍历sortArray的方法。

    NSMutableArray *valueArray = [NSMutableArray array];
    for (NSString *sortString in sortArray) {
        [valueArray addObject:[params objectForKey:sortString]];
    }

现在我们有两个数组,分别对应升序排序的key和value,所以再创建一个keyValue的数组来存储每一个key和value的格式。

    NSMutableArray *signArray = [NSMutableArray array];
    for (int i = 0; i < sortArray.count; i++) {
        NSString *keyValueStr = [NSString stringWithFormat:@"%@:%@",sortArray[i],valueArray[i]];
        [signArray addObject:keyValueStr];
    }

最后的一步,就是用“,”把每个字符串拼接起来,很简单。

    NSString *sign = [signArray componentsJoinedByString:@","];
    return sign;

这时,字符串sign里存储的就是要求我们完成的,没有进行MD5校验的签名字符串了,可以打印出来看一下。

[24923:3184830] hometown:Dongying,name:LinH,phone:18814868888,userID:330909199301271234

可以看到hometown,name,phone,userID已经按首字母排序并且完成拼接。所以字典的排序我们就讲到这里,MD5加密下一篇再来讲述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,295评论 0 16
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,275评论 0 4
  • 为了练习思维导图,更为了回应儿子昨日的导图画,今天花了大半个小时也终于完成了从开始学画导图以来的第四幅正儿八经的图...
    民大铁老师阅读 538评论 1 2
  • 每个人都有自己的不容易,只是他们不会挂在嘴边,因为他们知道有些东西说了也没用,自己还是要坚持努力的追求自己的理想。...
    杨安劲阅读 609评论 1 1
  • 1.这个是加班的周末,一些原本不属于我做的事,无端端都变成了由我做!!而我只可以无声无息做着,做着不是自己要做的事...
    Juzid055阅读 1,784评论 4 1