接口签名进行key排序,并MD5加密
import org.apache.commons.codec.digest.DigestUtils;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.TreeMap;
/**
* @Author: rongrong
* @Date: 2018/4/23
* @Description:
*/
public class MD5Utils {
private static void getDigest(TreeMap<String, String> map, String key, String charset){
StringBuilder sb = new StringBuilder();
for (Map.Entry entry : map.entrySet()) {
sb = sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
sb.append("key").append("=").append(key);
System.out.println("拼接后的字符:"+sb.toString());
String sign = DigestUtils.md5Hex(getContentBytes(sb.toString(), charset));
System.out.println("加密后的签名:"+sign);
}
private static byte[] getContentBytes(String content, String charset) {
if (charset == null || "".equals(charset)) {
return content.getBytes();
}
try {
return content.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
}
}
public static void main(String[] args) {
//treeMap默认是key升序排序 ,如果需要降序,可以使用Comparator中的compare方法
TreeMap<String,String> map = new TreeMap<String, String>();
map.put("name", "zychen");
map.put("password", "123456");
map.put("project", "base");
map.put("tenantId", "192319387131");
getDigest(map, "helloWorld","utf-8");
}
}
简单叙说jwt加密原理以及这样加密方式的优缺点?
原理:JWT由三部分组成:header.payload.signature,每部分是一个Json表示。最终的Token对这三部分进行编码之后的字符串,中间用“.”分割。header用来描述token的类型(jwt)以及使用的hash算法,payload包含一些摘要信息,signature签名由前面的Header、Payload以及秘钥组成。当访问登录页的时候,登录服务验证之后,签发证书返回给客户端。客户端保存证书,并在每次请求时将其附在request header中。服务器接收请求之后,通过签名和时戳,验证Token的有效性。若有效,则响应客户端。
优点:无状态,不需要在 session中存储用户信息,不用担心跨域问题,只需在用户验证成功后,获取一个JWT token,服务端验证签名即可,比 cookie 更支持原生移动端应用,验证解耦,无需使用特定的身份验证方案,token可以在任何地方生成
缺点:
1.请求地址中的token容易被盗取,难以保证token本身的安全
2.HTTP 头中自定义属性但是局限性太大,XMLHttpRequest 请求通常用于Ajax方法中对于页面局部的异步刷新,通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便
摘要认证:
采用对参数和响应进行摘要的方法,每次请求和响应,按照一定的规则生成数字摘要,客户端和服务端双方需要约定好参数的排序方式,请求的参数经过排序后,再将参数名名称和值经过一定的策略组织起来,加上一个秘钥secret,就是‘盐’通过约定的摘要算法生成数字摘要,传递给服务端。服务端在接收到客户端传递的参数后,服务端会采取和客户端相同的策略对参数进行排序,并且加上相同的secret,采用相同的摘要算法生成摘要串,由于相同内容经过相同的摘要算法,生成的摘要内容必定相同。将服务端生成的摘要串与客户端生成的摘要串进行比较,这样就能知道参数内容是否被篡改。
接口签名进行key排序,并MD5加密的更多相关文章
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- python接口自动化测试二十七:密码MD5加密
# MD5加密 # 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import hashlib def MD5(str): # 创建md5对象 hl ...
- 对于MD5加密处理方式
来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...
- Flutter 接口签名MD5加密
第一步 更新pubspec.yaml crypto: ^+ 第二步 先引入头文件: import 'dart:convert'; import 'package:convert/convert.dar ...
- 小程序签名MD5加密
最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行MD5加密. //时间戳 var timestamp = (Date.parse(new Date()))/1000;//签名 ...
- 【Golang 接口自动化06】微信支付md5签名计算及其优化
前言 可能看过我博客的朋友知道我主要是做的支付这一块的测试工作.而我们都知道现在比较流行的支付方式就是微信支付和支付宝支付,当然最近在使用低手续费大力推广的京东金融(已改名为京东数科)以后也可能站到第 ...
- 使用robotframework做接口测试4——搞定接口签名及密码加密
接口签名是我做接口测试撞到的第一块石头,刚到新公司,本来想默默憋出来一个大招,然后碰到了签名接口,直接给跪了.于是只好找开发哥哥帮忙,把签名算法的java文件拿到,一行行对着用python实现了一遍. ...
- soupUI解决md5加密签名,cookie传递
问题详情: 1.接口调用需要前提状态:登录状态(cookie) 2.接口请求需要签名,签名规则为:MD5(TokenKey+apikey+timestamp+nonc) 其中 1.TokenKey.a ...
- postman headers 请求参数和MD5加密签名
postman 变量可以这样写:{{timestamp}} ,也可以用系统的,{{$timestamp}},这样就不用给自己赋值了,但在 pre-requestScript中是获取不到这个值的 所以我 ...
随机推荐
- Spring boot 连接Redis实现HMSET操作
这篇文章记录使用spring-boot-starter-redis访问Redis.Redis相关的的配置文件放在Resources目录下的application.yml文件中,如下所示: spring ...
- vue-cli3 第三版安装搭建项目
Vue CLI是一个用于快速Vue.js开发的完整系统 3.X较2.X结构变了很多,更优雅,开发体验更好 官方:https://cli.vuejs.org/guide/ 安装:https://cli. ...
- 最棒的 JavaScript 学习指南(2018版)
译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...
- Weex Ui - Weex Conf 2018 干货分享
本文是2018年 Weex Conf 中议题<Weex + Ui>的内容文档整理,主要给大家介绍飞猪 Weex 技术体系从无到有的过程,包括 Weex Ui 组件库的开发和发展,重点分享在 ...
- Linux 文件删除 提示 Operation not permitted
Linux 删除 隐藏文件提示 Operation not permitted ? linux 删除 隐藏文件 提示 Operation not permitted 不允许操作? 使用 ls ...
- C++向量 vector动态数组
需要包含头文件, #include <vector> using namespace std; vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所 ...
- 洛谷P1494 【[国家集训队]小Z的袜子】
纪念自己独立完成的一道省选题(菜鸡如我只会看题解qwq) 还算是一道比较裸的莫队题把,比有的题目简单很多,也很好想怎么O(1)转移,比别的题就多了一个组合数计算(还有gcd??),还没算%意义下,也是 ...
- steps/train_sat.sh
<<LDA_MLLT_fMLLR三音素HMM的训练流程图.vsdx>>
- python网络编程初识
一,什么是计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和 [1] 信 ...
- python 的基础 学习 第七天 is id 编码的补充
1,== 两个等号比较的是数值,is比较的是内存地址.print(id())查看的内存地址. 小数据池只存在于数字与字符串中,数字 是 -5^^256,是为了节省空间. 字符串1,如果含有特殊字符 ...