zoukankan      html  css  js  c++  java
  • 练习MD5加密jar包编写

    简介

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

    签名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包放入jmeterlibext目录里面里面

    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())

    逆风的方向更适合飞翔,不怕千万人阻挡,只怕自己投降!
  • 相关阅读:
    AndroidWear开发之下载SDK[Android W/Android L]
    Androidの共享登录之方案研究
    AndroidのUI体验之ImmersiveMode沉浸模式
    谷歌Volley网络框架讲解——HttpStack及其实现类
    谷歌Volley网络框架讲解——网络枢纽
    05-使用jQuery操作input的values
    02-jQuery的选择器
    01-jQuery的介绍
    07-BOM client offset scroll 的系列
    06-js中的中的面向对象 定时器
  • 原文地址:https://www.cnblogs.com/jackzz/p/10121053.html
Copyright © 2011-2022 走看看