練習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包放入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())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM