基于MD5加密的简单接口加密方法

基于MD5加密的简单接口加密方法

最近在给第三方提供接口(http post)方法的时候,一直考虑这个加密,怎样简单有效,最终我参考了微信的签名方法,自己实现了下,写成工具类,有需要的可以参考一下:

    -

一、签名规则:

  1. 数值的参数去掉key为空的数据,然后按照Collections.sort()方法默认排序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串strA;

  2. 2) strA最后拼接上key得到strSignTemp字符串,并对strSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到signatures值。

    举例:
    请求参数如下:

entrustmentOrderId : 1234567890
entrustmentOrderStatus : 3

第一步:对参数进行Collections.sort()方法默认排序,按照key=value的格式组成字符串如下:

strA="entrustmentOrderId=1234567890&entrustmentOrderStatus=3";

第二步:拼接key并签名:

strSignTemp=strA+"&key=6b323d7ed39e0008";
signatures=MD5(strSignTemp).toUpperCase();

二、密钥设置

密钥值:6b323d7ed39e0008

三、签名工具代码

package com.test.util;

import java.security.MessageDigest;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class MD5Util {

    /**
     * 
     * @Description: 生成MD5
     * @author: tianpengw
     * @param message
     * @return
     */
    public static String getMD5(String message) {
        String md5 = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个md5算法对象
            byte[] messageByte = message.getBytes("UTF-8");
            byte[] md5Byte = md.digest(messageByte); // 获得MD5字节数组,16*8=128位
            md5 = bytesToHex(md5Byte); // 转换为16进制字符串
        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5;
    }

    /**
     * 
     * @Description: 二进制转十六进制
     * @author: tianpengw
     * @param bytes
     * @return
     */
    public static String bytesToHex(byte[] bytes) {
        StringBuffer hexStr = new StringBuffer();
        int num;
        for (int i = 0; i < bytes.length; i++) {
            num = bytes[i];
            if (num < 0) {
                num += 256;
            }
            if (num < 16) {
                hexStr.append("0");
            }
            hexStr.append(Integer.toHexString(num));
        }
        return hexStr.toString().toUpperCase();
    }

    /**
     * 
     * @Description: 签名:请求参数排序并后面补充key值,最后进行MD5加密,返回大写结果
     * @author: tianpengw
     * @param params 参数内容
     * @param key key值
     * @return
     */
    public static String signatures(Map<String, Object> params, String key){
        String signatures = "";
        try {
            List<String> paramsStr = new ArrayList<String>();
            for (String key1 : params.keySet()) {
                if(null != key1 && !"".equals(key1)){
                    paramsStr.add(key1);
                }
            }
            Collections.sort(paramsStr);
            StringBuilder sbff = new StringBuilder();
            for (String kk : paramsStr) {
                String value = params.get(kk).toString();
                if ("".equals(sbff.toString())) {
                    sbff.append(kk + "=" + value);
                } else {
                    sbff.append("&" + kk + "=" + value);
                }
            }
            //加上key值
            sbff.append("&key="+key);
            signatures = getMD5(sbff.toString()).toUpperCase();
        }catch(Exception e) {
            e.printStackTrace();
        }
        return signatures;
    }
}

工具里的东西没什么难度,这个key值可以自己定义然后告知第三方即可

到此工具类已经介绍完毕,有什么不明确的地方可以评论区回复

发布了22 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/niaoer2010/article/details/80182415
今日推荐