http接口开发请求参数签名实用工具类
作用: 在http接口对参数做签名,防止接口被非法调用
package com.yanek.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 请求参数签名工具类
*
*/
public class ParamSignUtils {
public static void main(String[] args)
{
HashMap<String, String> signMap = new HashMap<String, String>();
signMap.put("a","01");
signMap.put("c","02");
signMap.put("b","03");
String secret="test";
HashMap SignHashMap=ParamSignUtils.sign(signMap, secret);
System.out.println("SignHashMap:"+SignHashMap);
List<String> ignoreParamNames=new ArrayList<String>();
ignoreParamNames.add("a");
HashMap SignHashMap2=ParamSignUtils.sign(signMap,ignoreParamNames, secret);
System.out.println("SignHashMap2:"+SignHashMap2);
}
public static HashMap<String, String> sign(Map<String, String> paramValues,
String secret) {
return sign(paramValues, null, secret);
}
/**
* @param paramValues
* @param ignoreParamNames
* @param secret
* @return
*/
public static HashMap<String, String> sign(Map<String, String> paramValues,
List<String> ignoreParamNames, String secret) {
try {
HashMap<String, String> signMap = new HashMap<String, String>();
StringBuilder sb = new StringBuilder();
List<String> paramNames = new ArrayList<String>(paramValues.size());
paramNames.addAll(paramValues.keySet());
if (ignoreParamNames != null && ignoreParamNames.size() > 0) {
for (String ignoreParamName : ignoreParamNames) {
paramNames.remove(ignoreParamName);
}
}
Collections.sort(paramNames);
sb.append(secret);
for (String paramName : paramNames) {
sb.append(paramName).append(paramValues.get(paramName));
}
sb.append(secret);
byte[] md5Digest = getMD5Digest(sb.toString());
String sign = byte2hex(md5Digest);
signMap.put("appParam", sb.toString());
signMap.put("appSign", sign);
return signMap;
} catch (IOException e) {
throw new RuntimeException("加密签名计算错误", e);
}
}
public static String utf8Encoding(String value, String sourceCharsetName) {
try {
return new String(value.getBytes(sourceCharsetName), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(e);
}
}
private static byte[] getSHA1Digest(String data) throws IOException {
byte[] bytes = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
bytes = md.digest(data.getBytes("UTF-8"));
} catch (GeneralSecurityException gse) {
throw new IOException(gse);
}
return bytes;
}
private static byte[] getMD5Digest(String data) throws IOException {
byte[] bytes = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
bytes = md.digest(data.getBytes("UTF-8"));
} catch (GeneralSecurityException gse) {
throw new IOException(gse);
}
return bytes;
}
private static String byte2hex(byte[] bytes) {
StringBuilder sign = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes[i] & 0xFF);
if (hex.length() == 1) {
sign.append("0");
}
sign.append(hex.toUpperCase());
}
return sign.toString();
}
}
http接口开发请求参数签名实用工具类相关推荐
- 腾讯开放平台接口鉴权(计算签名)工具类 java版
腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...
- Requests方法 -- 参数关联与JSESSION(上一个接口的返回数据作为下一个接口的请求参数)...
前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了. 最常见的案例就是网站的登录案例,很多网站的登录并不仅 ...
- python 签名计算 请求参数签名
请求参数签名 例如:支付宝签名算法 MD5: 把MD5密钥(Key)拼接在待验证签名的字符串尾部,然后使用各自语言对应的MD5加密函数进行加密. import hashlib# 参数 api_toke ...
- Servlet | HttpServletRequest接口、通过request接口获取请求参数
目录 一:HttpServletRequest接口 二:通过request接口获取请求参数 一:HttpServletRequest接口 (1)HttpServletRequest是一个接口,全限定名 ...
- Boost 库中的实用工具类使用入门
简介: 实用工具类开发和维护会耗费程序员的时间.Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中.本文简单概述一些较流行的 Boost 实用工具类,并帮助您 ...
- Android 开发人员不得不收集的工具类集合
RxTools 项目地址:vondear/RxTools 简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...
- Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...
- Android快速开发不可或缺的11个工具类(下载)
Android快速开发不可或缺的11个工具类(下载) 源码简介 Android快速开发不可或缺的11个辅助类,其中10个来自张鸿洋的博客,1个是我平时积攒的,复制粘贴到你的项目里,添加上包名就可以直接 ...
- java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源
实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通 ...
- 分页封装实用工具类及其使用方法
分页封装实用工具类及其使用方法 作者: javaboy2012 Email:yanek@163.com qq: 1046011462 package com.yanek.util; import ...
最新文章
- [学习笔记]数字电路技术
- Unable to load the Wrapper's native library because none of the following files及解决方法
- 肝!一款基于 Python 语言的 Linux 资源监视器!
- How to resolve warning message Access restriction -The type Resource is not accessible
- DES和AES加密:指定键的大小对于此算法无效
- 雨林木风win11 32位装机版镜像v2021.07
- UE4为什么使用C++替代UnrealScript?
- 小米高管:已投大量精力研发手机AI芯片,造不造还没定
- JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
- 转:《潜伏》映射办公室潜规则
- Fiddler抓包流程
- 什么句型可以 让我说出 悲伤的文法
- 【预测模型】基于天牛须算法BAS优化BP神经网络实现数据预测matlab源码
- Why Transformer works
- Windows客户端开发--获取系统mac地址(使用WMI)
- PostgreSQL 数据库查询
- SQL计算两个日期之间的工作日天数,去除法定节假日和周末
- win10系统的计算机C盘在哪,win10系统电脑C盘programdata在哪的图文办法
- BadUsb----结合实例谈此类外设的风险
- CSS3粒子连接动画