简介

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

签名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. LeetCode算法题-Valid Palindrome(Java实现)

    这是悦乐书的第174次更新,第176篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第33题(顺位题号是125).给定一个字符串,确定它是否是回文,只考虑字母数字字符并忽略 ...

  2. ArrayList和LinkedList在中间开始插入的快慢比较

    首先创建带数据的两个List, 然后在中间插入数据, 观察完成时间 public class Hero { public static void main(String[] args){ listAn ...

  3. Lingo求解线性规划案例4——下料问题

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 造纸厂接到定单,所需卷纸的宽度和长度如表 卷纸的宽度 长度 5 7 9 10000 30000 20000 工 ...

  4. TestFlight的使用--再也不用担心环境打错了

    转赞请注明出处:http://www.cnblogs.com/zhanggui/p/7039651.html 一.前言 在iOS开发过程中,难免会遇到各种Bug.因此你会去解决所有的Bug,然后提交到 ...

  5. [福大软工] Z班 第1次成绩排行榜

    作业地址 http://www.cnblogs.com/easteast/p/7403491.html 作业要求 (1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? ...

  6. Django-rest-framework 接口实现 ModelSerializer 使用

    ModelSerializer 使用 不需要单独写字段的 序列化工具类 相当于 ModelForm 写法:以及 注意事项: 继承 serializers.ModelSerializer 在类中填写 c ...

  7. (5)Python字典

  8. docker 10 docker的镜像原理

    镜像是什么? 镜像是一个轻量级,可执行的软件包,用来打包运行环境和基于运行环境开发的软件包,它包含某个软件运行环境的所有内容.包括代码,运行时的库,配置文件和环境变量 UnionFs(联合文件系统) ...

  9. 记一次layui弹框关闭问题

    我在博客园记录过layui关于弹框关闭问题,文章为layui关闭弹出层,这次出现了特殊情况,之前是通过layer.closeAll()解决了这个问题,但是这次解决不了.而换成parent.layer. ...

  10. js获取访问IP、地区、、当前操作浏览器

    js获取IP.地区.当前操作浏览器有什么用呢? 我的回答是用处很多,比如现在的异地登录和对用户常用浏览器做数据分析等. 源代码如下:index.html <!DOCTYPE html> & ...