简介

参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损。原因在于接入者和提供者都会对每一次的接口访问进行签名和验证。

签名sign的方式是目前比较常用的方式。

  • 第1步:接入者把需求访问的接口的所有必要的参数信息(注意是所有参数),除去sign本身,以及值是空的参数,按参数名字母顺序排序。拼接成字符串

  • 第2步: 然后把排序后的参数按参数1值1参数2值2…参数n值n(这里的参数和值必须是传输参数的原始值,不能是经过处理的,的方式拼接成一个字符串。

  • 第3步: 把分配给接入方的验证密钥key(或者是提供者提供的一个SECRET_KEY,这个SECRET_KEY只有接入者和提供者知道)拼接在第2步得到的字符串前面。

  • 第4步:对加入密匙key的字符串进行加密或是摘要(用MD5或是SHA1摘要的比较多)

  • 第5步:对MD5的摘要结果转成大写然后写成字符串,传给参数sign

举例:
假设传输的数据是
http://www.xxx.com/interface.aspx?sign=sign_value&p2=v2&p1=v1&method=cancel&p3=&pn=vn
(实际情况最好是通过post方式发送),
其中sign参数对应的sign_value就是签名的值。 第一步,拼接字符串,首先去除sign参数本身,然后去除值是空的参数p3,
剩下p2=v2&p1=v1&method=cancel&pn=vn,
然后按参数名字符升序排序,method=cancel&p1=v1&p2=v2&pn=vn. 第二步,然后做参数名和值的拼接,最后得到methodcancelp1v1p2v2pnvn 第三步,在上面拼接得到的字符串前加上验证密钥key,我们假设是abc,
得到新的字符串abcmethodcancelp1v1p2v2pnvn 第四步,然后将这个字符串进行md5计算,假设得到的是abcdef,
然后转为大写,得到ABCDEF这个值即为sign签名值。 注意,计算md5之前请确保接口与接入方的字符串编码一致,
如统一使用utf-8编码或者GBK编码,如果编码方式不一致则计算出来的签名会校验失败。
服务器用密匙key对参数进行同样的MD5摘要算法,比对sign值

MD5摘要

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等

jmeter的MD5摘要算法

我的Jmeter3.2版本已经没有了_MD5这个函数了。
所以要用MD5对参数进行摘要,我们需要自己导入MD5摘要算法的jar包

用Eclipse编写一个java的MD5摘要算法的jar包

 
image.png
 
image.png
 
image.png
 
image.png

MD5摘要算法在java中的编码
LMFMD5.java

package LMF.md5;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; public class LMFMD5 {
//创建一个类LMFMD5
public String MD5(String sourceStr) {
String result = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
// 生成一个MD5加密计算摘要
md.update(sourceStr.getBytes());
// 使用指定的byte数组更新摘要
byte b[] = md.digest();
// 把密文转换成十六进制的字符串形式
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
result = buf.toString();
System.out.println("MD5(" + sourceStr + ",32) = " + result);
// System.out.println("MD5(" + sourceStr + ",16) = " + buf.toString().substring(8, 24));
// 注释的是md5的16位取值
} catch (NoSuchAlgorithmException e) {
System.out.println(e);
}
return result;
}
}

test.java(测试)

package LMF.md5;
import LMF.md5.LMFMD5;
public class test {
public static void main (String[] args) {
String res = new LMFMD5().MD5("laimeifeng");
System.out.println(res);
}
}

把MD5摘要算法打包成jar包

 
image.png
 
image.png

把MD5摘要算法的jar包放入jmeter的lib\ext目录里面里面

 
image.png

**Jmeter的BeanShell Sampler

 
image.png

Jmeter的查看MD5摘要算法结果

 
image.png
 
image.png
 
image.png

这样一个MD5摘要算法就成功加入到jmeter里面,可以进行MD5参数签名了。

作者:我为峰2014
链接:https://www.jianshu.com/p/240e929323a6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. javaIO-学习笔记
  2. centos 命令大全
  3. C#中Thread.sleep() 【转载】
  4. JQ写简单的伸缩菜单(内附效果图和源代码)
  5. WSUS更新服务器
  6. PL/SQL Developer中文注释乱码的解决办法
  7. javascript中的光标
  8. sql server返回插入数据表的id,和插入时间
  9. 老男孩Python九期全栈学习笔记3
  10. 数字证书原理(ssl,https)
  11. Educational Codeforces Round 58 (Rated for Div. 2) G 线性基
  12. 在Bootstrap开发中解决Tab标签页切换图表显示问题
  13. Python自学笔记-装饰器1(廖雪峰的网站)
  14. Web大前端面试题-Day2
  15. 【MongoDB】MongoDB的一些操作命令
  16. jQuery过滤选择器:first和:first-child的区别,CSS伪类:first-child
  17. 20175209 实验三《敏捷开发与XP实践》实验报告
  18. C#操作摄像头 实现拍照功能
  19. 一、linux基本操作
  20. SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

热门文章

  1. 优秀软件project师必备的7大特性
  2. ubuntu上java的运行环境jre的安装
  3. 微信小程序的小问题(2)
  4. 深入理解Java和MySQL乱码问题
  5. [NetworkFlow]网络流建模相关
  6. 64位BASM学习随笔(一)
  7. Ubuntu下在Eclipse IDE for C/C++ Developers中怎样执行C语言的GTK程序?(已解决)
  8. 安卓Recovery模式该怎么用?【转】
  9. SQL Source Control for teams
  10. 【BZOJ 3942】 Censoring