// // EZHttpUtil.m // EZOpenSDKDemo // // Created by 陈嘉乐 on 2021/2/26. // Copyright © 2021 hikvision. All rights reserved. // #import "EZHttpUtil.h" #import #import #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; } /// /// 判断当前值是否需要参与签名,保持跟云端一致 /// 空字符串不参与 /// 数组,集合,对象不参与 /// /// /// +(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