当前位置: 首页 > news >正文

公司网站建设必要性wordpress上传图片占空间

公司网站建设必要性,wordpress上传图片占空间,东莞做微网站建设价格,网站怎么做联系我们页面一、前言 ​ 有些接口的请求会带上sign#xff08;签名#xff09;进行请求#xff0c;各接口对sign的签名内容、方式可能不一样#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会… 一、前言 ​ 有些接口的请求会带上sign签名进行请求各接口对sign的签名内容、方式可能不一样但一般都是从接口的入参中选择部分内容组成一个字符串然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会有sign的算法描述。这里通过Postman的Pre-request Script以及JMeter的BeanShell前置处理器进行接口签名的处理。完整代码在每部分的最后 被测系统teachSignServer Gitee江苏豪之诺软件科技有限公司/KnowledgeBroadcast - Gitee.com 直接双击运行.exe文件即可密钥文件与conf.ini需要与exe处于同一文件夹下 其余工具 1.bundle.jshttps://github.com/joolfe/postman-util-lib/tree/master/postman 使用方式我们在后面使用到了再进行介绍 2.json.jar https://mvnrepository.com/artifact/org.json/json 选择适合的版本 点击bundle 将下载的jar包置于jmeter的./lib/ext下并重启jmeter 被测接口信息 接口 URL Method Body 签名规则 v0 http://127.0.0.1:5000/api/v0/teachsign POST {AppKey: z417App,AppVer: 1.0.0,Data: {SPhone:18662255783,EType:0},DeviceName: web,DeviceType: web,Lang: CN,Sign: teachsign,TimeStamp: 1625456804} appkey,timestamp,data,secret四个字段的值拼接使用32位md5进行签名 v1 http://127.0.0.1:5000/api/v1/teachsign POST {appid: wxd930u,mch_id: 10100,device_info: 100,body: {EType:0},DeviceType: ,nonce_str: ibuaiVc,sign: CD198C36632A274C49E5F2F028FA257C,source: null,ts: 1625456804} 1. 参与签名运算的参数选用入参里边value非空的参数2. 参与签名运算的参数按照ASCII顺序排序3. 组合方式keyvalue通过符连接4. 最后加上盐keysecretsecret在conf.ini中配置同理后面的私钥与公钥也可在其中进行配置5. 使用32位md5进行签名sign的字母全大写 v2 http://127.0.0.1:5000/api/v2/teachsign POST {busId: ,busCnl: POS,requJnINo: abceefgghkjlafksdffdsf,reqTxnTm: 16:30:16,serviceCode: chengxusong,bussJnIno: Arabic - Bahrain,sign: fsdfsd,reqTxnDt: 20210907,nonceStr: Language,sysCnl: OKPOS,ts: 1631003416} 1. 参与签名运算的参数选用入参里边value非空的参数2. 参与签名运算的参数按照ASCII顺序排序3. 使用private_key签名4. 使用SHA256withRSA进行签名 二、v0接口 1.Postman 获取请求参数并将body的参数转换为json对象 javascript var Json JSON.parse(pm.request.body); 获取所需变量并将新的时间戳更新到json对象中 javascript var TimeStamp Date.parse(new Date()) / 1000 - 10; Json.TimeStamp TimeStamp; var AppKey Json.AppKey; var Data Json.Data; var secretKey a323f9b6-1f04-420e-adb9-b06ty67b0e63; 字符串拼接 javascript var str AppKey TimeStamp Data secretKey; 进行md5运算并将生成的hash序列转换为字符串 javascript var strmd5 CryptoJS.MD5(str).toString(); 修改json对象中sign并将md5对象写回body中 javascript Json.Sign strmd5; pm.request.body.raw JSON.stringify(Json); // 将修改后的JSON转换回字符串格式写回到请求体中 完整代码 javascript /* vo加密规则 appkey,timestamp,data,secret四个字段的值拼接使用32位md5加密 */ /* * 获取请求参数 */ var Json JSON.parse(pm.request.body); // 将body的参数转换为json对象 /* * 获取所需变量 */ var TimeStamp Date.parse(new Date()) / 1000 - 10; // 获取时间戳 Json.TimeStamp TimeStamp; // 修改JSON var AppKey Json.AppKey; var Data Json.Data; var secretKey a323f9b6-1f04-420e-adb9-b06ty67b0e63; /* * 拼接字符串并加密 */ var str AppKey TimeStamp Data secretKey; var strmd5 CryptoJS.MD5(str).toString(); // 调用方法进行md5运算并将生成的hash序列转换为字符串 Json.Sign strmd5; // 修改JSON pm.request.body.raw JSON.stringify(Json); // 将修改后的JSON写回到请求体中 2.JMeter 在JMeter的时间戳可以直接使用JMeter自带函数在body中获取当然也可以在BeanShell前置处理器中使用代码获取 /1000是因为JMeter默认生成的时间戳为13位时间戳我们只需要10位即可。 导包org.json为第三方jar包 java import org.apache.commons.codec.digest.DigestUtils; import org.apache.jmeter.config.*; import org.json.*; 获取请求传入的body将其转化为Json对象 java // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataobj new JSONObject(arg.getValue()); 获取变量并拼接 java String TimeStamp dataobj.optString(TimeStamp); String AppKey dataobj.optString(AppKey); String Data dataobj.optString(Data); String secretKey a323f9b6-1f04-420e-adb9-b06ty67b0e63; String str AppKey TimeStamp Data secretKey; 进行md5运算 java sign DigestUtils.md5Hex(str); 修改json对象的sign并转换为字符串写回body中 java dataobj.put(Sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并歇回request-body中 完整代码 java import org.apache.commons.codec.digest.DigestUtils; import org.apache.jmeter.config.*; import org.json.*; /* * 获取请求传入的body将其转化为Json对象 */ // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataobj new JSONObject(arg.getValue()); /* * 获取变量并拼接字符串 */ // 获取变量 String TimeStamp dataobj.optString(TimeStamp); String AppKey dataobj.optString(AppKey); String Data dataobj.optString(Data); String secretKey a323f9b6-1f04-420e-adb9-b06ty67b0e63; // 字符串拼接 String str AppKey TimeStamp Data secretKey; /* * 签名更新body */ sign DigestUtils.md5Hex(str); // md5运算 dataobj.put(Sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并写回request-body中 三、v1接口 1.Postman ​ 获取请求参数并将body的参数转换为json对象 javascript var Json JSON.parse(pm.request.body); 获取时间戳并修改json对象 javascript var ts Date.parse(new Date()) / 1000 - 10; Json.ts ts; 去除sign参数本身然后去除值是空的参数 javascript var keys []; // 循环遍历JSON for (let k in Json ){ // 排除json中键位sign以及值为空的数据 if (k sign || !Json[k]){ continue; } keys.push(k); // 生成筛选后的key序列 } 排序 javascript keys.sort(); 拼接字符串 javascript let keys_str ; for (let x of keys){ keys_str ${x}${Json[x]}; // 使用模版字符串进行拼接 } keys_str keys_str keya323f9b6-1f04-420e-adb9-b06ty67b0e63; 进行md5运算并将生成的hash序列转换为字母全大写字符串 javascript var strmd5 CryptoJS.MD5(keys_str).toString().toUpperCase(); 修改json对象中sign并将md5对象写回body中 javascript Json.sign strmd5; pm.request.body.raw JSON.stringify(Json); 完整代码 javascript /* v1加密规则 1. 参与签名运算的参数选用入参里边value非空的参数 2. 参与签名运算的参数按照ASCII顺序排序 3. 组合方式keyvalue通过符连接 4. 最后加上keysecret 5. 使用32位md5签名sign的字母全大写 */ /* * 获取请求参数 */ var Json JSON.parse(pm.request.body); var ts Date.parse(new Date()) / 1000 - 10; // 获取时间戳 Json.ts ts; // 修改json /* * 去除sign参数本身然后去除值是空的参数 */ var keys []; // 定义key序列 // 循环遍历JSON for (let k in Json ){ // 排除json中键位sign以及值为空的数据 if (k sign || !Json[k]){ continue; } keys.push(k); // 生成筛选后的key序列 } /* * 对请求参数排序 */ keys.sort(); /* * 拼接字符串 */ let keys_str ; for (let x of keys){ keys_str ${x}${Json[x]}; // 使用模版字符串进行拼接 } keys_str keys_str keya323f9b6-1f04-420e-adb9-b06ty67b0e63; /* * 签名并更新body */ var strmd5 CryptoJS.MD5(keys_str).toString().toUpperCase(); // 调用方法进行md5运算并将生成的hash序列转换为字母全大写字符串 Json.sign strmd5; // 修改Json pm.request.body.raw JSON.stringify(Json); 2.JMeter 同样在body中使用内置函数定义时间戳ts 导包 java import org.apache.commons.codec.digest.DigestUtils; import org.apache.jmeter.config.*; import org.json.*; 获取请求传入的body将其转化为Json对象 java // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataobj new JSONObject(arg.getValue()); 获取Json的key java // 创建list存储body中的key值 List keyArry new ArrayList(); // 生成迭代对象 Iterator iterator dataObj.keys(); // 循环key将其放入list for (String key : iterator) { if (!key.equals(sign) !key.equals(Sign)) { keyArry.add(key); } } 对list进行排序 java Collections.sort(keyArry); 字符串拼接 java String str ; for (String s : keyArry) { // log.error(s); String value dataObj.optString(s); // 剔除值为空或值为null的参数 if (!value.equals() !value.equals(null)) { str strs value; } } str str keya323f9b6-1f04-420e-adb9-b06ty67b0e63; 进行md5运算并转换为字母全大写 java String sign DigestUtils.md5Hex(str).toUpperCase(); 修改json对象的sign并转换为字符串写回body中 java dataobj.put(sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并歇回request-body中 完整代码 java import org.apache.commons.codec.digest.DigestUtils; import org.apache.jmeter.config.*; import org.json.*; /* * 获取请求传入的body将其转化为Json对象 */ // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataObj new JSONObject(arg.getValue()); /* * 获取Json的key进行排序 */ // 创建list存储body中的key值 List keyArry new ArrayList(); // 生成迭代对象 Iterator iterator dataObj.keys(); // 循环key将其放入list for (String key : iterator) { if (!key.equals(sign) !key.equals(Sign)) { keyArry.add(key); } } /* * 对list进行排序 */ Collections.sort(keyArry); /* * 循环list中的key,读取对应的Value组成字符串 */ String str ; for (String s : keyArry) { String value dataObj.optString(s); // 剔除值为空或值为null的参数 if (!value.equals() !value.equals(null)) { str strs value; } } str str keya323f9b6-1f04-420e-adb9-b06ty67b0e63; /* * 签名并更新body */ String sign DigestUtils.md5Hex(str).toUpperCase(); // 进行md5运算并转换为字母全大写 dataobj.put(sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并写回request-body中 四、v2接口 1.Postman 将下载后的json导入到postman进入Lib install请求 发送请求该请求会将bundle.js写入到全局变量中 获取请求参数并将body的参数转换为json对象 javascript var Json JSON.parse(pm.request.body); 获取时间戳并修改json对象 javascript var ts Date.parse(new Date()) / 1000 - 10; Json.ts ts; 去除sign参数本身然后去除值是空的参数 javascript var keys []; // 循环遍历JSON for (let k in Json ){ // 排除json中键位sign以及值为空的数据 if (k sign || !Json[k]){ continue; } keys.push(k); // 生成筛选后的key序列 } 排序 javascript keys.sort(); 拼接字符串 javascript let keys_str ; for (let x of keys){ keys_str ${x}${Json[x]}; // 使用模版字符串进行拼接 } keys_str keys_str.slice(0,-1); // 删除最后一个 导入刚才写入到全局变量的js javascript eval(pm.globals.get(pmlib_code)); 由于私钥过长所以这里把私钥的内容写到环境变量中私钥内容可在pkcs8_rsa_private_key.pem查看私钥与公钥可自行更换在conf.ini中进行配置即可 获取私钥 javascript const privatekey pm.environment.get(privatekey); 加密 javascript const sha256withrsa new pmlib.rs.KJUR.crypto.Signature({alg: SHA256withRSA}); // 生成签名对象并制定为SHA256withRSA类型 sha256withrsa.init(privatekey); // 初始化privatekey sha256withrsa.updateString(keys_str); // 更新要签名的数据 const sign pmlib.rs.hextob64(sha256withrsa.sign()); // 签名并转换为Base64字符串 修改json对象中sign并将md5对象写回body中 javascript Json.sign sign; pm.request.body.raw JSON.stringify(Json); // 将修改后的JSON转换回字符串格式写回到请求体中 完整代码 javascript /* v2加密规则 1. 参与签名运算的参数选用入参里边value非空的参数 2. 参与签名运算的参数按照ASCII顺序排序 3. 使用private_key签名 4. 使用SHA256withRSA进行签名 */ /* * 获取请求参数 */ var Json JSON.parse(pm.request.body); var ts Date.parse(new Date()) / 1000 - 10; // 获取时间戳 Json.ts ts; // 修改json /* * 去除sign参数本身然后去除值是空的参数 */ var keys []; // 定义key序列 // 循环遍历JSON for (let k in Json ){ // 排除json中键位sign以及值为空的数据 if (k sign || !Json[k]){ continue; } keys.push(k); // 生成筛选后的key序列 } /* * 对请求参数排序 */ keys.sort(); /* * 拼接字符串 */ let keys_str ; for (let x of keys){ keys_str ${x}${Json[x]}; // 使用模版字符串进行拼接 } keys_str keys_str.slice(0,-1); // 删除最后一个 /* * 加密并更新body */ eval(pm.globals.get(pmlib_code)); // 导入写入到全局变量的js const privatekey pm.environment.get(privatekey); // 从环境变量获取私钥 const sha256withrsa new pmlib.rs.KJUR.crypto.Signature({alg: SHA256withRSA}); // 生成签名对象并制定为SHA256withRSA类型 sha256withrsa.init(privatekey); // 初始化privatekey sha256withrsa.updateString(keys_str); // 更新要签名的数据 const sign pmlib.rs.hextob64(sha256withrsa.sign()); // 签名并转换为Base64字符串 Json.sign sign; pm.request.body.raw JSON.stringify(Json); 2.JMeter 同样在body中使用内置函数定义时间戳ts同时添加用户定义的变量配置元件来存放私钥 导包 java import org.apache.jmeter.config.*; import org.apache.commons.codec.digest.DigestUtils; import org.json.*; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; 获取请求传入的body将其转化为Json对象 java // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataobj new JSONObject(arg.getValue()); 获取Json的key java // 创建list存储body中的key值 List keyArry new ArrayList(); // 生成迭代对象 Iterator iterator dataObj.keys(); // 循环key将其放入list for (String key : iterator) { if (!key.equals(sign) !key.equals(Sign)) { keyArry.add(key); } } 对list进行排序 java Collections.sort(keyArry); 字符串拼接 java String str ; for (String s : keyArry) { // log.error(s); String value dataObj.optString(s); // 剔除值为空或值为null的参数 if (!value.equals() !value.equals(null)) { str strs value; } } //删除最后一个 str str.substring(0,str.length()-1); 读取私钥 ​ java中读取私钥需要删除前面的“-----BEGIN PRIVATE KEY-----”和后面的“-----END PRIVATE KEY-----”且需要key首尾连接中间无换行或空格。 java String privateKeyString vars.get(privateKey); // 从用户定义的变量中读取私钥 privateKeyString privateKeyString.replace( , ); // 删除多余的空格 byte[] privateKeyBytes Base64.getDecoder().decode(privateKeyString); // 将Base64解码转化为字符串 PKCS8EncodedKeySpec keySpec new PKCS8EncodedKeySpec(privateKeyBytes); // 根据给定的编码密钥创建一个新的 PKCS8EncodedKeySpec PrivateKey privateKey KeyFactory.getInstance(RSA).generatePrivate(keySpec); // 生成RSA的私钥对象。 创建 Signature 对象并初始化 java Signature signature Signature.getInstance(SHA256withRSA); // 生成SHA256withRSA的Signature 对象 signature.initSign(privateKey); // // 初始化签署签名的私钥 更新要签名的数据 java signature.update(str.getBytes(UTF-8)); // 更新要签名或验证的字节 签名 java byte[] signatureBytes signature.sign(); // 执行签名 String sign Base64.getEncoder().encodeToString(signatureBytes); // 将签名结果转换为 Base64 字符串 修改json对象的sign并转换为字符串写回body中 java dataobj.put(sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并歇回request-body中 完整代码 java import org.apache.jmeter.config.*; import org.apache.commons.codec.digest.DigestUtils; import org.json.*; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; /* * 获取请求传入的body将其转化为Json对象 */ // 获取请求 Arguments arguments sampler.getArguments(); // 获取请求中的body内容 Argument arg arguments.getArgument(0); // 获取body的value并将其转化为JSONObject对象 JSONObject dataObj new JSONObject(arg.getValue()); /* * 获取Json的key进行排序 */ // 创建list存储body中的key值 List keyArry new ArrayList(); // 生成迭代对象 Iterator iterator dataObj.keys(); // 循环key将其放入list for (String key : iterator) { if (!key.equals(sign) !key.equals(Sign)) { keyArry.add(key); // log.error(key); } } // 对list进行排序 Collections.sort(keyArry); /* * 循环list中的key,读取对应的Value组成字符串 */ String str ; for (String s : keyArry) { // log.error(s); String value dataObj.optString(s); if (!value.equals()) { str strs value; } } //删除最后一个 str str.substring(0,str.length()-1); /* * 读取私钥 */ String privateKeyString vars.get(privateKey); // 从用户定义的变量中读取私钥 privateKeyString privateKeyString.replace( , ); // 删除多余的空格 byte[] privateKeyBytes Base64.getDecoder().decode(privateKeyString); // 将Base64解码转化为字符串 PKCS8EncodedKeySpec keySpec new PKCS8EncodedKeySpec(privateKeyBytes); // 根据给定的编码密钥创建一个新的 PKCS8EncodedKeySpec PrivateKey privateKey KeyFactory.getInstance(RSA).generatePrivate(keySpec); // 生成RSA的私钥对象。 /* * 读创建 Signature 对象并初始化 */ Signature signature Signature.getInstance(SHA256withRSA); // 生成SHA256withRSA的Signature 对象 signature.initSign(privateKey); // 初始化签署签名的私钥 // /* * 更新要签名的数据化 */ signature.update(str.getBytes(UTF-8)); // 更新要签名或验证的字节 /* * 签名并更新body */ byte[] signatureBytes signature.sign(); // 签署所有更新字节的签名 // 将签名结果转换为 Base64 字符串 String sign Base64.getEncoder().encodeToString(signatureBytes); // 编码为Base64字符串 dataobj.put(sign, sign); // 修改Sign arg.setValue(dataobj.toString()); // 转换为字符串并歇回request-body中 最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 行动吧在路上总比一直观望的要好未来的你肯定会感谢现在拼搏的自己如果想学习提升找不到资料没人答疑解惑时请及时加入群 731789136里面有各种测试开发资料和技术可以一起交流哦。 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你
http://wiki.neutronadmin.com/news/178219/

相关文章:

  • 建设网站企业邮箱网站建设服务电子商务网站建设前期准备
  • 观澜专业做网站公司大数据查询官网
  • 洛阳便宜网站建设公司富阳网站公司
  • 中国互联网站建设中心广告平面设计培训班要学多久
  • flashfxp链接网站免费网页源代码网站
  • 烟台 做网站的公司网络推广都有哪些方式
  • win10本地安装wordpress电脑优化大师
  • 本地生活网站 源码西安网站开发公司地址
  • 新建南昌网站建设公司深圳华企立方
  • 如何建设好医院网站风铃制作
  • php 手机网站cms免费发布企业信息平台
  • 上海建设银行网站长沙房产政务信息网
  • 网站建站网站45133wordpress安装微信聊天工具
  • 网站建设來超速云建站网站怎么icp备案
  • 网站项目规划与设计装潢设计图片三室效果图
  • 做网站需要掌握网站建设东营
  • 织梦网站文章内容模板哈尔滨网站建设自助建站
  • 珠海建网站企业名称核准
  • 温州建站费用农村不起眼的商机
  • 网站开发知识绵阳市网站建立
  • 黄骅市海边网站优化哪家公司好
  • 建站公司杭州网页表单制作步骤
  • 北京网站设计与制作龙岗网站制作资讯
  • 张家港网站建设网络营销能做什么?
  • 国字型网站建设布局wordpress静态首页设置
  • 网站开发技术html自己做旅游攻略的网站
  • 综合网站有哪些杭州商城网站建设
  • 网站支付的功能如何做阅读推广联盟
  • php跳转网站深圳市市场监督管理局
  • 建站公司 转型经验网站建设工作室是干嘛的