【测试需求】: 开发修改了签名的代码,需要验证签名的正确性
【测试思路】:按照开发提供的php的代码,以及沟通代码逻辑之后,思路如下:
1、通过postman脚本生成对应的签名,与代码生成的签名值对比,是否一致
2、通过脚本生成的签名,调用接口可以成功
【需求描述】
示例:
"auth":{
"参数A":"161C09E54CA90DC1B6AAE7A90105CB3B",
"timestamp":"2019-12-29 16:21:13",
"参数B":"14590062",
"s签名":"c54addc6de82fb2d5123272389cce7c0645b1149"
}
签名1:
生成规则:三个字符串值(参数A, timestamp, 参数B)按正序排序后相拼接为一个字符串.使用 SHA1 散列算法生成数字签名
签名2:
生成规则:
(a)将"auth"值中"签名"项删除,剩下的json内容生成一个json字符串。
(b)再将(a)中得到的字符串与三个字符串值(参数A, timestamp, 参数B)相拼接为一个等待加密的完整字符串
(c)对(b)中生成的字符串先使用MD5算法生成过渡数字签名,再使用SHA1 散列算法生成最终数字签名。
【测试脚本】
签名1:
var timestamp = '2020-11-29 16:21:13'; //代码中对时间戳进行了格式转换,脚本中直接省略这一步
var B = '24590062'; //任意的4-8位数据字母组合
var A = 'D195B8BB0EBE6441E70F4A1A02E8F129'; //也可以设置为全局变量,为了修改方便,直接在脚本中定义
//参数放到数组中
var list =[];
list.add(B);
list.add(timestamp);
list.add(A);
list.sort();
console.log(list);
//字符串拼接
var str = '';
for(var i=0;i<list.length;i++){
str += list[i];
}
console.log("str ---->" + str);
//字符串进行SHA1散列算法加密
var signHmacSHA1=CryptoJS.SHA1(str).toString(CryptoJS.enc.Hex).toLowerCase();
console.log("sign ---->" + signHmacSHA1);
pm.environment.set("sign",signHmacSHA1);
签名2:
var timestamp = "2020-12-29 16:21:13";
var B = "14590062";
var A = "D195B8BB0EBE6441E70F4A1A02E8F129";
var json={
"mediaId": "161C09E54CA90DC1B6AAE7A90105CB3B",
"timestamp": "2020-12-29 16:21:13",
"randomNumber": "14590062"
};
var string=JSON.stringify(json);
//拼接字符串
var str=string+A+timestamp+B
console.log("str ---->" + str);
//md5加密
var signHmacSMD5=CryptoJS.MD5(str).toString().toLowerCase();
//字符串进行SHA1散列算法加密
var signHmacSHA1=CryptoJS.SHA1(signHmacSMD5).toString(CryptoJS.enc.Hex).toLowerCase();
console.log("MD5 ---->" + signHmacSMD5);
console.log("SHA1 ---->" + signHmacSHA1);
postman.setGlobalVariable("sign",signHmacSHA1);