作用: 在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接口开发请求参数签名实用工具类相关推荐

  1. 腾讯开放平台接口鉴权(计算签名)工具类 java版

    腾讯开放平台 接口鉴权(签名)工具类 java版 用到了Hutool工具类 package top.seasmall.platform.core.config.nettyws.util;import ...

  2. Requests方法 -- 参数关联与JSESSION(上一个接口的返回数据作为下一个接口的请求参数)...

    前言 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了. 最常见的案例就是网站的登录案例,很多网站的登录并不仅 ...

  3. python 签名计算 请求参数签名

    请求参数签名 例如:支付宝签名算法 MD5: 把MD5密钥(Key)拼接在待验证签名的字符串尾部,然后使用各自语言对应的MD5加密函数进行加密. import hashlib# 参数 api_toke ...

  4. Servlet | HttpServletRequest接口、通过request接口获取请求参数

    目录 一:HttpServletRequest接口 二:通过request接口获取请求参数 一:HttpServletRequest接口 (1)HttpServletRequest是一个接口,全限定名 ...

  5. Boost 库中的实用工具类使用入门

    简介: 实用工具类开发和维护会耗费程序员的时间.Boost 通过提供几个高质量的库,从而简化了此过程,您可以将这些库轻松集成到现有的代码库中.本文简单概述一些较流行的 Boost 实用工具类,并帮助您 ...

  6. Android 开发人员不得不收集的工具类集合

    RxTools 项目地址:vondear/RxTools  简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...

  7. Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...

  8. Android快速开发不可或缺的11个工具类(下载)

    Android快速开发不可或缺的11个工具类(下载) 源码简介 Android快速开发不可或缺的11个辅助类,其中10个来自张鸿洋的博客,1个是我平时积攒的,复制粘贴到你的项目里,添加上包名就可以直接 ...

  9. java Http消息传递之POST和GET两种方法--通过实用工具类来获取服务器资源

    实现该方法需要导入一些jar包 可以去一下地址下载: http://pan.baidu.com/s/1hqrJF7m /** * 实用工具类来获取服务器资源 * * get方法传送数据 * * 1.通 ...

  10. 分页封装实用工具类及其使用方法

    分页封装实用工具类及其使用方法 作者: javaboy2012 Email:yanek@163.com qq:    1046011462 package com.yanek.util; import ...

最新文章

  1. [学习笔记]数字电路技术
  2. Unable to load the Wrapper's native library because none of the following files及解决方法
  3. 肝!一款基于 Python 语言的 Linux 资源监视器!
  4. How to resolve warning message Access restriction -The type Resource is not accessible
  5. DES和AES加密:指定键的大小对于此算法无效
  6. 雨林木风win11 32位装机版镜像v2021.07
  7. UE4为什么使用C++替代UnrealScript?
  8. 小米高管:已投大量精力研发手机AI芯片,造不造还没定
  9. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)
  10. 转:《潜伏》映射办公室潜规则
  11. Fiddler抓包流程
  12. 什么句型可以 让我说出 悲伤的文法
  13. 【预测模型】基于天牛须算法BAS优化BP神经网络实现数据预测matlab源码
  14. Why Transformer works
  15. Windows客户端开发--获取系统mac地址(使用WMI)
  16. PostgreSQL 数据库查询
  17. SQL计算两个日期之间的工作日天数,去除法定节假日和周末
  18. win10系统的计算机C盘在哪,win10系统电脑C盘programdata在哪的图文办法
  19. BadUsb----结合实例谈此类外设的风险
  20. CSS3粒子连接动画

热门文章

  1. office 2010 安装时出错 MSXML版本6.10.1129.0终极解决方案
  2. 五子棋游戏设计详解(C语言)
  3. 解密QQ的MsgEx.db消息文件格式
  4. 仿淘宝收货地址之三级联动
  5. 04-1下载Win系统(装机助理)
  6. idea配置svn地址
  7. 浏览器极速模式和兼容模式差异
  8. wps office 2019中文版
  9. 简述matlab数组和矩阵运算的异同点,matlab矩阵运算和数组运算
  10. 【白皮书分享】2021年中国家庭教育白皮书.pdf(附下载链接)