//
|
// EZHttpUtil.m
|
// EZOpenSDKDemo
|
//
|
// Created by 陈嘉乐 on 2021/2/26.
|
// Copyright © 2021 hikvision. All rights reserved.
|
//
|
|
#import "EZHttpUtil.h"
|
#import <Foundation/Foundation.h>
|
#import <CommonCrypto/CommonDigest.h>
|
|
#define APP_KEY @"HDL-HOME-APP-TEST"
|
#define SECRET_KEY @"WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"
|
|
@implementation EZHttpUtil
|
|
|
+(NSMutableDictionary *)GetSignRequestDictionary:(NSMutableDictionary *)params{
|
if(params == NULL){
|
params =[NSMutableDictionary dictionary];
|
}
|
[params setValue:APP_KEY forKey:@"appKey"];
|
[params setValue:@"" forKey:@"timestamp"];
|
//1.对KEY升序
|
NSArray *keyArray = [params allKeys];
|
NSArray *sortKeyArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
|
return [obj1 compare:obj2 options:NSNumericSearch];
|
}];
|
//2.2 拼接按URL键值对
|
NSString *newString = @"";
|
for(NSString *key in sortKeyArray){
|
if(params[key] != NULL){
|
NSString *valueStr = params[key];
|
//检测当前参数是否需要参与校验
|
if([self IfValueNeedSign:valueStr]){
|
newString = [newString stringByAppendingString:[NSString stringWithFormat:@"%@=%@&", key,valueStr]];
|
}
|
}
|
}
|
//2.3 拼接SECRET_KEY
|
newString = [newString substringToIndex:[newString length] - 1];
|
newString = [ newString stringByAppendingString: SECRET_KEY];
|
//2.4 MD5转换+转小写
|
if(newString == nil || newString == NULL){
|
newString = @"";
|
}
|
NSString* signstr = [self signMD5Encrypt:newString];
|
[params setValue:signstr forKey:@"sign"];
|
|
return params;
|
}
|
|
+ (NSString*)signMD5Encrypt:(NSString *)str
|
{
|
const char *cStr = [str UTF8String];
|
unsigned char digest[CC_MD5_DIGEST_LENGTH];
|
CC_MD5( cStr, strlen(cStr),digest );
|
NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
|
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
|
[result appendFormat:@"%02x", digest[i]];
|
return result;
|
|
|
}
|
|
/// <summary>
|
/// 判断当前值是否需要参与签名,保持跟云端一致
|
/// 空字符串不参与
|
/// 数组,集合,对象不参与
|
/// </summary>
|
/// <param name="valueStr"></param>
|
/// <returns></returns>
|
+(bool)IfValueNeedSign:(NSString *)valueStr{
|
if (( (valueStr == nil || [valueStr isKindOfClass:[NSNull class]] || valueStr.length == 0))//判空字符
|
|| ([[valueStr substringToIndex:1] isEqual:@"{"])//判断是否为对象
|
|| ([[valueStr substringToIndex:1] isEqual:@"["])//判断是否为数组
|
) {
|
return false;
|
}
|
return true;
|
}
|
|
@end
|