Jmeter、Postman之RSA加密登录接口测试


方法1:直接用在线加密工具进行加密,得到密码

参考地址 https://www.toolscat.com/decode/rsa 输入公钥和密码,直接加密即可
//获取公钥
var data = JSON.parse(responseBody);
var key=data.body;

//设置key
pm.environment.set("key", key);

步骤2:使用加密后的密码登录

(1)填写接口参数 密码从环境变量中获取

 (2)Pre-request Script使用上一步的公钥+密码进行加密

脚本如下
//--------------以下为需要加密的内容,可以根据需求定义多个------------------//
var clearText = '123456';   //clearText 对应{{pwd}}的明文,和{{pwd}}的格式要一致
// var clearText = '{"arg1":"def","arg2":123,"arg3":7.89}'; json格式

//获取变量中的公钥
const encrypt_key = pm.variables.get("key");

//const forge_url = 'https://gitee.com/lzq1357/various/raw/master/forge_min.js';
//forge_min.js来自:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js
//---------------------------------------------------------------------//
//var forge_js =pm.variables.get("forgejs");
//eval("forge_js");

if (!pm.globals.has("forgeJS")) {
    pm.sendRequest("https://gitee.com/lzq1357/various/raw/master/forge_min.js", function (err, res) {
        if (err) {
            console.log(err);
        } else {
            pm.globals.set("forgeJS", res.text());
        }
    })
} else {
    eval(pm.globals.get("forgeJS"));
}

function encryptRsa(encrypt_key, clearText) {
    console.info('cleartext: ' + clearText);
    //注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
    const public_key = '-----BEGIN PUBLIC KEY-----\n'
        + encrypt_key
        + '\n-----END PUBLIC KEY-----';
    var publicKey = forge.pki.publicKeyFromPem(public_key);
    var buffer = forge.util.createBuffer(clearText, 'utf8');
    var bytes = buffer.getBytes();
    var encryptedText = forge.util.encode64(publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', {
        md: forge.md.sha256.create(),
        mgf1: {
            md: forge.md.sha1.create()
        }
    })
    );
    console.info('encryptedText: ' + encryptedText);
    return encryptedText;
};

//------------------以下内容根据需要修改定义,可以加密多个字段------------------------//
var encryptedText = encryptRsa(encrypt_key, clearText);
postman.setEnvironmentVariable("pwd", encryptedText);     //设置环境变量pwd
(3)获取请求结果中的token,设置为环境变量,后续接口可直接使用
//获取token
var data = JSON.parse(responseBody);
var token=data.body.token;
pm.environment.set("token", token);
(4)执行请求

 方法3:Jmeter

(1)添加获取公钥的接口,挂载json处理器获取公钥   (2)添加登录接口,并挂载beanshell预置处理器

  参考资料: https://blog.csdn.net/m0_37627073/article/details/116520248 http://testerhome.com/topics/14869 https://www.jianshu.com/p/2eb5cfb782cb https://github.com/digitalbazaar/forge#rsa