美文网首页
iOS HmacSha256Hex签名

iOS HmacSha256Hex签名

作者: A慢慢懂 | 来源:发表于2020-08-21 10:58 被阅读0次

    为了网络安全,后台会对接口进行加密,需要对请求的参数进行sign加密。此时此刻,我们iOS开发对需要对sign签名,例如后台给的签名规则如下。

    /*#### 签名规则:
    1.签名keySign:sign密钥
    
    2.循环将参数的key进行排序,循环获取value,进行value排序后转为数组,用逗号拼接
    
    3.循环将key和value中间加入=号拼接,末尾加入#号
    
    4.将获取的字符串进行HmacSha256Hex签名;
     */
    

    其实签名规则很简单,第一步对参数排序并且拼接成字符串,第二步再进行签名此时我们该怎么做,代码如下:

    /**
    *  字典根据key值排序,并且key和value中间加入=号拼接,末尾加入#号。
    *
    *  @param dict      要排序的字典数组
    *
    *
    *  @return 排序后key和value拼接的字符串
    */
    +(NSString *)sortKeyArr:(NSDictionary *)dict{
        NSString *result = @"";
        NSArray *keyArr = [dict allKeys];
        //对字典里面的key值排序
        NSLocale *currentLocale = [NSLocale currentLocale];
        NSComparator finderSortBlock = ^(id string1,id string2) {
        NSRange string1Range =NSMakeRange(0, [string1 length]);
               return [string1 compare:string2 options:NSCaseInsensitiveSearch range:string1Range locale:currentLocale];
           };
        //排序处理
        NSArray *arr2 = [keyArr sortedArrayUsingComparator:finderSortBlock];
        //循环遍历排序
        for (int i = 0; i<arr2.count; i++) {
            result = [result stringByAppendingFormat:@"%@=%@#",arr2[i],dict[arr2[i]]];
        }
        return result;
    }
    /**
     *  加密方式,MAC算法: HmacSHA256
     *
     *  @param secret       秘钥
     *  @param content 要加密的文本
     *
     *  @return 加密后的字符串
     */
    + (NSString *)hmacSHA256WithSecret:(NSString *)secret content:(NSString *)content
    {
        //密钥转换成 const char
        const char *cKey  = [secret cStringUsingEncoding:NSASCIIStringEncoding];
          // 加密的内容有可能有中文 所以用NSUTF8StringEncoding
        const char *cData = [content cStringUsingEncoding:NSUTF8StringEncoding];
        unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
        //SHA256加密
        CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
        NSMutableString *hexString = [NSMutableString string];
        //转换成字符串
        for (int i=0; i<sizeof(cHMAC); i++)
        {
            [hexString appendFormat:@"%02x", cHMAC[i]];
        }
        return hexString;
    }
    

    每个公司的签名规则不尽相同,根据各自的签名规则进行签名。此文章记录下HmacSHA256加密。有什么不足之处欢迎指出。
    代码链接:https://github.com/zhaimengting/CTSHasDemo

    相关文章

      网友评论

          本文标题:iOS HmacSha256Hex签名

          本文链接:https://www.haomeiwen.com/subject/mjtujktx.html