揭秘支付接口测试:如何使用JMeter和Python打造绝密HMAC-SHA256签名逻辑?(Base64,Md5,Sha,Rsa等)实战教程

  1. 安装 JMeter 首先需要安装 JMeter,可以从官网下载最新版本的二进制文件并解压到本地。然后启动 JMeter,进入主界面。

  2. ps:如果不知道怎么下载的或者没有安装包的请看文章的末尾即可

  3. 创建测试计划 在 JMeter 主界面点击 File -> New,或者直接按 Ctrl + N 创建一个新的测试计划。然后选择 Thread Group,在右边的面板中设置线程数、循环次数等参数。

  4. 添加 HTTP 请求 在 Thread Group 下点击右键,选择 Add -> Sampler -> HTTP Request。然后在 HTTP Request 中填写请求的 URL、请求方法、请求头、请求体等信息。

  5. 添加加密逻辑 在 HTTP Request 下添加一个 Listener,例如 View Results Tree 或者 View Results in Table。然后在 Listener 上方添加一个 JSR223 PreProcessor。在 PreProcessor 中编写 Python 脚本来实现加密逻辑。

  6.  

下面是一些常见的加密方式的示例:

【什么是Base加密】

当你想要告诉朋友一个悄悄话,但你又不希望其他人知道这个悄悄话的内容时,你可以使用 Base64 加密。这就像是你把这个悄悄话用一个密码进行加密,只有知道密码的人才能看到原始的内容。而对于不知道密码的人来说,他们只能看到一串看起来毫无意义的字符,就像是一首颠倒顺序的歌曲,听起来很奇怪,但只有知道正确的顺序才能听到真正的内容。

使用 Base64 加密:

import base64

text = "hello, world"
encoded = base64.b64encode(text.encode("utf-8"))
vars.put("encodedText", encoded.decode("utf-8"))

【使用 MD5 加密】

就像是把一段文字放进了一个神秘的黑匣子里,然后从另一端拿出一串看似毫无规律的数字和字母。这个黑匣子就像是一个魔法师一样,它会把你给它的文字转换成一串看起来毫不相关的代码。就好像你把一艘船装进了一个小盒子里,而这个小盒子的表面却没有任何变化一样。对于不知道正确的解码方法的人来说,他们只能看到这一串乱码,而无法知道原始的内容。

使用 MD5 加密:

import hashlib

text = "hello, world"
hashed = hashlib.md5(text.encode("utf-8")).hexdigest()
vars.put("hashedText", hashed)

【使用 SHA-256 加密】

就像是把一块巧克力放进了一个压缩机里,然后从另一端拿出了一颗看起来毫无变化的糖果。这个压缩机就像是一个巧克力工厂的神奇魔法师一样,它能够把大块的巧克力转换成一个小巧精致的糖果,而且不会影响糖果的味道和质量。对于不知道正确的解密方法的人来说,他们只能看到这个漂亮的糖果,而无法知道它的原始状态。SHA-256 就是这样一种神秘的魔法工具,能够把你给它的数据压缩成一串看起来毫不相关的代码,而且保证数据的完整性和安全性。

用 SHA-256 加密:

import hashlib

text = "hello, world"
hashed = hashlib.sha256(text.encode("utf-8")).hexdigest()
vars.put("hashedText", hashed)

【使用 RSA 加密】

就像是你把你的朋友一个巨无霸胖子放进了一个魔法箱里,然后从另一边拿出了一个小巧的“胖”子。这个魔法箱子就像是一个瘦身器一样,它能够把高大威猛的胖子压缩成小巧玲珑的胖子,而且不会影响外观和帅气。而 RSA 算法就像是这个超级瘦身器中的魔法师,它可以把你给它的数据压缩成一串看起来毫不相关的代码,保证数据的机密性和安全性。对于不知道正确解锁方法的人来说,他们只能看到这个小巧的胖子,但无法知道以前的胖子有多大。

使用 RSA 加密:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

public_key = RSA.importKey(open("public_key.pem").read())
cipher = PKCS1_v1_5.new(public_key)
text = "hello, world"
encrypted = cipher.encrypt(text.encode("utf-8"))
encoded = base64.b64encode(encrypted)
vars.put("encryptedText", encoded.decode("utf-8"))

需要注意的是,使用 RSA 加密时需要提供公钥,可以将公钥保存在一个名为 public_key.pem 的文件中,并放在 JMeter 工作目录下。如果需要使用其他加密方式,也可以参考相应的 Python 库来编写脚本。

  1. 验证结果 在 Listener 中查看请求和响应信息,验证加密逻辑是否正确。如果出现错误,可以通过调试 Python 脚本或者查看 JMeter 日志来定位问题。

通过以上步骤,就可以实现对接口进行加密的测试,并且使用 Python 语言编写加密逻辑。

接下来,我们将结合一个具体的例子来介绍在实战中如何使用 JMeter 和 Python 进行接口测试及加密。

实战开始!!!!实战开始!!!!实战开始!!!!实战开始!!!!实战开始!!!!

重要的事情说很多遍,手动emoji【狗头】

假设我们需要测试一个支付系统的接口,该接口需要进行签名验证,且签名方式为 HMAC-SHA256。我们已经获得了 API Key 和 Secret Key,并且可以使用 Python 的 Requests 库进行签名和请求发送。现在需要使用 JMeter 对该接口进行性能测试,并且在 JMeter 中添加 HMAC-SHA256 签名逻辑。

首先,我们需要创建一个新的测试计划,然后添加 Thread Group 和 HTTP Request。在 HTTP Request 中填写接口的 URL,例如 https://api.payment.com/payments。然后在请求头中添加必要的参数,包括 API Key、时间戳(以毫秒为单位)、随机字符串和签名等信息。其中,签名需要通过秘钥和参数计算得出,如下所示:

import hmac
import hashlib
import time
import random

api_key = "your_api_key"
secret_key = "your_secret_key"

timestamp = str(int(time.time() * 1000))
nonce = str(random.randint(100000, 999999))
params = {"amount": 100, "currency": "USD", "merchant_id": 1234}
message = f"{timestamp}\n{nonce}\nPOST\n/payments\n{api_key}\n" + "&".join([f"{k}={v}" for k, v in params.items()])
signature = hmac.new(secret_key.encode("utf-8"), message.encode("utf-8"), hashlib.sha256).hexdigest()

headers = {
    "Content-Type": "application/json",
    "X-Api-Key": api_key,
    "X-Timestamp": timestamp,
    "X-Nonce": nonce,
    "X-Signature": signature,
}

接下来,我们需要在 JMeter 中添加 HMAC-SHA256 签名逻辑。首先,在 HTTP Request 下方添加一个 JSR223 PreProcessor。然后,编写 Python 脚本来计算签名,并将签名结果存储到变量中:

import hmac
import hashlib

api_key = "your_api_key"
secret_key = "your_secret_key"

timestamp = str(int(time.time() * 1000))
nonce = str(random.randint(100000, 999999))
params = {"amount": 100, "currency": "USD", "merchant_id": 1234}
message = f"{timestamp}\n{nonce}\nPOST\n/payments\n{api_key}\n" + "&".join([f"{k}={v}" for k, v in params.items()])
signature = hmac.new(secret_key.encode("utf-8"), message.encode("utf-8"), hashlib.sha256).hexdigest()

vars.put("timestamp", timestamp)
vars.put("nonce", nonce)
vars.put("signature", signature)

最后,在 HTTP Request 的请求头中使用 JMeter 变量来填充参数值:

Content-Type: application/json
X-Api-Key: ${api_key}
X-Timestamp: ${timestamp}
X-Nonce: ${nonce}
X-Signature: ${signature}

现在,我们已经完成了接口测试并且通过 JMeter 实现了 HMAC-SHA256 签名。我们可以在 Listener 中查看请求和响应信息,并且可以通过 JMeter 的性能测试报告来评估接口的性能表现。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励,也方便你下次能够快速查找,感谢。

如果你想获取该文章配套的视频视频教程以及练手的接口。请狠狠点击下方链接,

并把所需的资料的文章链接发给我即可领取

如果你想获取简历模板+面试技术宝典+求职视频+上千份测试真题,也请狠狠点击下方链接,

并把所需的资料的文章链接发给我即可领取

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值