简介

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

签名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包,以下是操作步骤图

MD5摘要算法在java中的编码

Jackmd5.java文件编码如下

package
JACK.MD5;

import
java.security.MessageDigest;

import
java.security.NoSuchAlgorithmException;

public class JACKMD5 {

//创建一个类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
JACK.MD5;

import
JACK.MD5.JACKMD5;

public class test {

public static void main (String[] args) {

String res = new JACKMD5().MD5("jack的MD5加密jar包");

System.out.println(res);

}

}

接下来是导出jar包操作:

1、点击export …

下面是导出的jar包,MD5摘要算法的jar包放入jmeterlib\ext目录里面里面

Jmeter的BeanShell Sampler 和Debug sampler创建

import JACK.MD5.JACKMD5;

String res = new JACKMD5().MD5("jack测试md5的jar包");

System.out.printIn(res);

vars.put("md5",res.toString())

练习MD5加密jar包编写的更多相关文章

  1. SoapUI接口测试-验签值处理-调用java的加密jar包

    转载自:https://www.jianshu.com/p/7c672426a165 一. 背景: 调用接口时有个请求参数是对请求入参按一定规则进行加密生成的验签值,每次不同参数的请求生成唯一的验签值 ...

  2. python里面的MD5加密 ---# hashlib包的使用

    在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现 hashlib 概念:Hash,译做"散列",也有直接音译为"哈希"的.把任 ...

  3. 六、Jmeter中自动提取Http请求参数,并put到Map,然后进行MD5加密

    1.BeanShell PerOrocessor中的脚本 import src.com.csjin.qa.MD5.*;//个人jar包 import java.util.*; import java. ...

  4. Java 语言实现 MD5 加密

    Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么, ...

  5. 255.Spring Boot+Spring Security:使用md5加密

    说明 (1)JDK版本:1.8 (2)Spring Boot 2.0.6 (3)Spring Security 5.0.9 (4)Spring Data JPA 2.0.11.RELEASE (5)h ...

  6. spring md5 加密

    一.spring 自带的 DigestUtils 工具类可以进行 md5 加密 //导入包 import org.springframework.util.DigestUtils; //对密码进行 m ...

  7. jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密

    前提: eclipse.JDK.Jmeter 说明: 本文分为两部分进行配置说明 第一部分:编写JavaMD5加密脚本 第二部分:使用Jmeter的BeanShell进行验证 ************ ...

  8. Jmeter用BeanShell Sampler调用java写的jar包进行MD5加密

    [前言] 在工作中,有时候我们请求的参数可能需要加密,比如登录接口中的密码做了加密操作,今天我就给大家介绍一种方法:Jmeter用BeanShell Sampler调用java写的jar包进行MD5加 ...

  9. 【jar】JDK将单个的java文件打包为jar包,并引用到项目中使用【MD5加密】

    ==================================================================================================== ...

随机推荐

  1. UVA1609-Foul Play(构造+递归)

    Problem UVA1609-Foul Play Accept: 101  Submit: 514Time Limit: 3000 mSec Problem Description Input Fo ...

  2. y7000笔记本 darknet-yolo安装与测试(Ubuntu18.04+Cuda9.0+Cudnn7.1)

    环境配置看上一贴 https://www.cnblogs.com/clemente/p/10386479.html 1 安装darknet 1-1 克隆darknet repo git clone h ...

  3. [CQOI2018]九连环

    嘟嘟嘟 对于这种找规律的题,我向来是不会的. 通过大佬们的各种打表找规律.神奇dp等方法,我们得到了答案就是\(\lfloor \frac{2 ^ {n + 1}}{3} \rfloor\). 高精是 ...

  4. 小a与星际探索

    链接:https://ac.nowcoder.com/acm/contest/317/C来源:牛客网 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球.其中每个星球有一个能 ...

  5. SpringMVC @ResponseBody 406

    使用@ResponseBody注解可以让Controller返回json格式的数据,在需要传输一个对象信息的时候往往使用这种方式.如果在使用的时候遇到了406,一般原因是: 缺少jar包.转换成jso ...

  6. 4、原生jdbc链接数据库常用资源名

    原生jdbc链接数据库要素:#MySql:String url="jdbc:mysql://localhost:3306/数据库名";String name="root& ...

  7. ActiveMQ的queue以及topic两种消息处理机制分析

    1    queue与topic的技术特点对比 对比项 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状 ...

  8. Idea突然不停indexing的问题

    只要清理一下Idea的缓存和索引就可以了,在File-Invalidate Caches / Restart中,选择Invalidate and Restart,之后会重启Idea,然后就解决啦!

  9. 使用java实现快速排序(挖坑填数法和指针交换法)

    快速排序:通过一趟排序,将数据分为两部分,其中一部分中的所有数据比另外一部分的所有数据要小,然后按照此方法,分别对这两部分进行排序,达到最终的排序结果. 每趟排序选取基准元素,比该基准元素大的数据放在 ...

  10. linux之dos2unix命令

    今天在使用脚本升级的时候碰到一个问题,然后写了一个简单的自测脚本进行测试,如上图,理论上应该输出 /usr/local/mysql/bin/mysqldump -h 127.0.0.1 -uroot ...