ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java接口验签

2021-04-28 15:33:12  阅读:454  来源: 互联网

标签:java String 接口 params 签名 验签 Java 参数


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

项目开发过程中,难免会接触到接口验签,下面是我个人对验签的一些理解以及处理思路

一、何为验签?

接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确保两个签名是一样的,验签通过之后再进行业务逻辑处理

二、处理思路

双方约定好,参数按特定顺序排列,比如按首字母的顺序排列,如url:http://xxx/xxx.do?a=wersd&b=sd2354&c=4&signature=XXXXXXXXXXXX(signature为传入的签名),等你拿到入参后,将参数串a=wersd&b=sd2354&c=4按你们约定的签名规则,自己用md5加签一次,然后和入参的signature值对比,以确认调用者是否合法,这就是接口签名验证的思路。

三、java生成签名的工具类

package com.man4fun.mini.util;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;

public class SignatureUtil {

	/**
	 * 生成签名信息
	 *
	 * @param secretKey
	 *            产品私钥
	 * @param params
	 *            接口请求参数名和参数值map,不包括signature参数名
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public static String genSignature(String secretKey,
			Map<String, Object> params) throws UnsupportedEncodingException {
		// 1. 参数名按照ASCII码表升序排序
		String[] keys = params.keySet().toArray(new String[0]);
		Arrays.sort(keys);

		// 2. 按照排序拼接参数名与参数值
		StringBuffer paramBuffer = new StringBuffer();
		for (String key : keys) {
			paramBuffer.append(key).append(
					params.get(key) == null ? "" : params.get(key).toString());
		}
		// 3. 将secretKey拼接到最后
		paramBuffer.append(secretKey);

		// 4. MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
		return DigestUtils.md5Hex(paramBuffer.toString().getBytes("UTF-8"));
	}

}

总结

验签只能防止数据传输过程中数据不被篡改噢,并不能保证消息的安全性,要想保证消息的安全性还是需要对消息进行加密的,如果大家觉得这篇博客大家有帮助的话,麻烦点赞噢!

标签:java,String,接口,params,签名,验签,Java,参数
来源: https://blog.csdn.net/D____G/article/details/116234388

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有