用户注册场景:输入签名数据signature,appId,13位时间戳timestamp,6位随机数nonce,merchantId(非必填,本次不填)的请求参数发送给服务器,服务器返回响应数值后,校验响应数据中的signature是否一致,并且对响应数据中的data进行解密;在控制台获取resData的属性值,partnerUserNo的属性值,即用户注册成功

请求:签名计算及参数加密:

1.用户注册接口,需要对用户的nonce, times,以appSecret为密钥进行MD5加密得到签名数据;

2.将加密参数转为字符串,以appSecret为密钥,iv向量:sdkppillowserver用cbc模式的对数据进行加密;

3.将签名计算和加密后的数据放进请求参数里,并且更新原有的请求参数timestamp.

一:实现签名计算具体实现步骤如下:

(1)确定请求方法,请求地址,请求头,测试环境等参数准确;

(2)请求参数appId(找开发要),,6位随机数nonce(自己设置),timestamp(后续脚本生成),signature(后续脚本生成),填入请求Body里

(3)设置请求参数,将请求参数设置为变量datajson,由于从服务端接受的数据都是json字符串,需将它转化为对象;

var body = pm.variables.replaceIn(pm.request.body.raw);
var datajson = JSON.parse(body);

(4)签名计算,设置一个变量attrs包含nonce, times,appSecret的值,

将attrs转为字符串,以字符串形式由低到高进行排序,得到变量toSign;

const appSecret = 'rbjaiz0f9s0cohla3w8jiwo3006xxxxx';
var attrs = [appSecret, datajson.nonce];
var times = new Date().getTime(); attrs.push(times);
toSign = attrs.sort().join("");

(5)将数据使用MD5加密,由于我使用的是APIFOX,加密前需要调取crypto-js库;

在库里寻找MD5的加密算法语句如下

var CryptoJS = require("crypto-js");
const sign = CryptoJS.MD5(toSign).toString();
 
如果你不确定是否有计算出数据,可在控制台打印出来,如下:
console.log("请求参数的签名计算",sign);
以上就是签名计算的整个实现过程.
 
二:数据加密
将加密参数转为字符串,以appSecret为密钥,iv向量:sdkppillowserver用cbc模式,对数据进行aes256加密,并且进行Base64编码;

(1)将加密赋值给变量datatable,由于我们用户认证没有需要加密的参数,我们可以设置为空对象{}

const datatable = {}

(2)将对象转化为JSON字符串;

const dataString = JSON.stringify(datatable);

(3)对加密参数,appSecret,sdkppillowserver进行加密

const iv = CryptoJS.enc.Utf8.parse("sdkppillowserver");
const appSecretArr = CryptoJS.enc.Utf8.parse(appSecret);
const encryptText = CryptoJS.enc.Utf8.parse(dataString);
const encrypted = CryptoJS.AES.encrypt(encryptText, appSecretArr, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
const encryptionData = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log("加密后data数据",encryptionData); //我们通过控制台打印加密后的数据
 
三:更新请求体

(1)将加密数据,签名计算,时间戳添加到请求体中,并更新请求体.

datajson.data = encryptionData;
datajson.signature = sign;
datajson.timestamp = times;
pm.request.body.update(JSON.stringify(datajson, null, 2));
console.log("包含签名,时间戳的请求参数",datajson);   //返回给服务器的数据以JSON字符串的形式返回

以上就是请求体中签名计算和数据加密

响应后置:我们需要校验服务器返回的签名是否一致,并且对加密的数据进行破解

一:校验返回的签名数据是否一致

(1)设置变量获取响应体信息

var dataData = pm.response.json().data;
console.log("respData:",dataData)

(2)计算签名

const appSecret = 'rbjaiz0f9s0cohla3w8jiwo300xxxxxx';
var attrs = [appSecret, dataData.nonce,dataData.timestamp];
console.log("后置的签名数据:",attrs) toSign = attrs.sort().join("");
var CryptoJS = require("crypto-js");
const sign = CryptoJS.MD5(toSign).toString(); console.log("后置的签名计算",sign);

(3)断言签名是否与响应数据一致

pm.test("验证签名是否一致", function () { pm.expect(dataData.signature).to.eql(sign); });

(4)对响应数据的元素data进行解密

二:对响应数据的元素data进行解密

const iv = CryptoJS.enc.Utf8.parse("sdkppillowserver");
const arr = CryptoJS.enc.Utf8.parse(appSecret);
const base64 = CryptoJS.enc.Base64.parse(dataData.data);
const decryptText = CryptoJS.enc.Base64.stringify(base64);
const decryptionData = CryptoJS.AES.decrypt(decryptText, arr, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); console.log("解密的结果展示",decryptionData);
 
 

 

如何利用Apifox通过签名计算及数据加解密进行用户认证接口测试?的更多相关文章

  1. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希

    数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...

  2. T-SQL问题解决集锦——数据加解密(2)

    原文:T-SQL问题解决集锦--数据加解密(2) 问题三.如何让指定用户可以对数据表进行Truncate操作? Truncate在对大表全删除操作时,会明显比Delete语句更快更有效,但是因为它不需 ...

  3. T-SQL问题解决集锦——数据加解密

    原文:T-SQL问题解决集锦--数据加解密 以下代码已经在SQLServer2008上的示例数据库测试通过 问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号, ...

  4. shiro框架学习-6-Shiro内置的Filter过滤器及数据加解密

    1.  shiro的核心过滤器定义在枚举类DefaultFilter 中,一共有11个 ,配置哪个路径对应哪个拦截器进行处理 // // Source code recreated from a .c ...

  5. php利用自定义key,对数据加解密的方法

    客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...

  6. java基础/数据加解密(Mooc)

    一.消息摘要算法 常用摘要算法: 以下 (HEX)内容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1.消息摘要算法MD5及MD族(MD2,MD4) 消 ...

  7. 个人永久性免费-Excel催化剂功能第62波-单元格区域内数据加解密处理,最有效地保护数据方式

    Excel的数据保护能力有限,诸如之前提及过的工作表保护.工作薄保护等,都是十分微弱的保护措施,而对于强保护的工作薄打开密码来说,它像是个总开关一样,要么全不能看,要么就全看到.有这样的场景需求,一份 ...

  8. 利用BBRSACryptor实现iOS端的RSA加解密

    背景 RSA这种非对称加密被广泛的运用于网络数据的传输,但其在iOS上很难直接实现,BBRSACryptor框架通过移植openssl实现了iOS端的RSA,本文将介绍如何使用BBRSACryptor ...

  9. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    当前使用的是Linux系统,已经按装使用OpenSSL软件包, 一.使用OpenSSL来生成私钥和公钥 1.执行命令openssl version -a 验证机器上已经安装openssl 1 open ...

  10. Java中使用OpenSSL生成公钥私钥进行数据加解密

    当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...

随机推荐

  1. Docker之RabbitMQ保姆级别安装

    Docker之RabbitMQ保姆级别安装: 如果觉得样式不好:跳转即可 http://www.lifengying.site/(md文件复制过来有些样式会不一样) 学英语网站项目:自己先保证Redi ...

  2. openwrt 运行golang 设置时区

    转载自:https://www.ohyee.cc/post/note_go_read_openwrt_timezone openwrt 运行golang 时候发现打印时间错误.golang读取时区的过 ...

  3. mysql数据库常用指令

    1.查询当前连接数据库别名 select database(); Current database 项显示当前连接的数据库 2.查询数据表中当天的数据 select * from 表名 WHERE T ...

  4. 【RTOS】《多任务抢占式调度器》笔记

    <多任务抢占式调度器>读书笔记 1.多任务系统 在多任务调度器的作用下,多个任务轮流使用cpu,实现多任务相互独立并发运行的效果,能够充分利用硬件资源,提高cpu效率 2.任务特性 a.动 ...

  5. CCF 202006-1 线性分类器

    #include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...

  6. python机器学习——BP(反向传播)神经网络算法

    背景与原理: BP神经网络通常指基于误差反向传播算法的多层神经网络,BP算法由信号的前向传播和反向传播两个过程组成,在前向传播的过程中,输入从输入层进入网络,经过隐含层逐层传递到达输出层输出,如果输出 ...

  7. 标准c++中string类函数介绍

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是 ...

  8. mysql之数据库操作-第一篇

    1.数据库的创建 mysql> create database if not exists myTestDB; Query OK, 1 row affected (0.00 sec) 2.查看可 ...

  9. vue 封装时间格式化和number精确度

    //format.js 公用js /** * Parse the time to string * @param {(Object|string|number)} time * @param {str ...

  10. JSON详述

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写 使用json函数需要导入json库,import json json.dumps  将p ...