md5加密后如何再加salt_使用jmeter对字符串进行加密

423d39908d15ca7f5cd09b857712384c.png

之前介绍过如何利用jmeter函数助手构造时间戳参数,

本次再来研究下另一个功能:对字符串进行加密  

下面通过一个例子来演示一下如何对请求参数进行md5加密

准备工作

1836a455fa8b7becbecd78aafeab6b8e.png

这次仍然使用百度通用翻译接口当做案例,因为它刚好有一个参数就是经过md5加密得来的  

之前用postman来发送这种有md5加密参数的请求时,也是用百度翻译做的例子,传送门:postman系列(十):发送携带md5签名、随机数等参数的请求

通用翻译接口文档如下

a772c03bf2db69296e3570c015dc1918.png

一些简要说明:

1、签名是为了保证调用安全,使用MD5算法生成的一段字符串,生成的签名长度为 32位,签名中的英文字符均为小写格式;

2、为保证翻译质量,请将单次请求长度控制在 6000 bytes以内。(汉字约为2000个);

3、签名生成方法如下:

(1)将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)

按照 appid+q+salt+密钥 的顺序拼接得到字符串1

(2)对字符串1做md5,得到32位小写的sign

官方举例:将apple从英文翻译成中文

请求参数:q = applefrom = ento = zhappid = 2015063000000001salt = 1435660288平台分配的密钥: 12345678生成sign:>拼接字符串1拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678得到字符串1 =2015063000000001apple143566028812345678>计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码)sign=md5(2015063000000001apple143566028812345678)sign=f89f9594663708c1605f3d736d01d2d4完整请求为:http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4

使用jmeter来实现

1836a455fa8b7becbecd78aafeab6b8e.png

先把接口参数录入到jmeter

d0991c4148986c0aa3bc5b06db1fab1c.png

其中,sign就是把 appid+q+salt+秘钥 拼接并经过md5加密后得到的  

所以我们这次要做的就是对 “appid+q+salt+秘钥”进行加密     

当前jmeter版本(5.0)的函数助手中有2个函数可以实现字符串加密的功能:__digest__MD5

150367df2f4a8623d12c643b943bcc71.png

谷歌硬核翻译:

d6433da97ffab78f548e870b2ea5667d.png

Digest algorithm:加密算法,可以填写上图所示的那些,如MD2、MD5等  

String to be hashed:把需要加密的字符串填写到这里  

后面3个参数是选填  

如果按照当前写死的参数来进行加密的话,

String to be hashed处应该填写:

2015063000000001钢铁侠143566028812345678,如下

14f9e15bc3a5ff66d8c16b0db9df29d9.png

这样就生成了一个加密字符串,把它填写到sign处就好了  

但是这个接口中有一点必须注意,在参数中:q 代表需要翻译的字符,salt 是一个随机数,这两个参数都是动态变化的(因为每次翻译的字符不同、每次生成的随机数也不同) 

所以在生成sign加密字符串时,不能用写死的 qsalt     

由于前面在请求中定义好了参数q和salt以及appid等,所以接下来我尝试了如下写法

c0025d4eb2c616c29ce1564afa467541.png

但是在实际运行时,得不到正确的响应结果,总是提示sign不合法(猜测可能在函数助手中不能引用外部变量,或者是引用的方式不对,总之这个方法我没有走通)    __MD5函数 也存在这个问题,不再做赘述  
网上冲浪一番后找到了另一种实现方式: 使用beanshell脚本对字符串md5加密    在jmeter的lib目录下,自带commons-codec-1.11.jar 如果没有,可以到maven库下一个 下载地址:https://mvnrepository.com/ 然后放到jmeter的lib目录下

所以,可以借助apache工具类DigestUtils实现字符串加密

1b32826df8248192ef3577a14ad29149.png

针对这个翻译接口,把脚本做一下如下改造   1、在请求前添加一个配置元件:【用户定义的变量】,把可能变化的请求参数加到里面 d24d16afda4a254b9684f41f663ba1ca.png

2、在请求下面添加一个BeanShell PreProcessor

里面的脚本如下  

import org.apache.commons.codec.digest.DigestUtils;String sign = DigestUtils.md5Hex("${appid}${q}${salt}ABCDEFGOAwerfdt8434ed");vars.put("msign", sign);
第二行表示把 “appid+q+salt+秘钥” 进行加密(这里就是从用户定义的变量中把对应参数的值取过来),把生成的加密字符串赋给 sign   

第三行表示定义一个变量msign,并把加密后的字符串传给msign

9c608239f4d79760bc5452e083ed6790.png

3、在http请求中引用这些定义好的参数变量

6c15ccce38cc3e8f295cb2d3de02823e.png

运行一下查看结果  

请求内容

0ec06e30c7dd7202f90ba7cd4f7c1228.png

响应结果

a4ae536ce375271260f3b827a5cf5b11.png

说明生成的加密字符串是合法能用的   

有兴趣可以看看这篇:

https://www.cnblogs.com/uncleyong/p/9429752.html#_label4

介绍了多种生成加密字符串的方法

e7bafa5491217bb6b8a665334ab1997e.png

80a90e5845f0f887885a4e795238fb70.gif

喜欢记得来一个

f0c90139d52e0ebbe3a63e7fec10506b.gif

4e3b58b8ab808b02316577f91bf2778e.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值