前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >接口签名参数Map字典排序

接口签名参数Map字典排序

作者头像
Ant丶
发布于 2023-08-16 00:21:40
发布于 2023-08-16 00:21:40
39100
代码可运行
举报
文章被收录于专栏:cayzlhcayzlh
运行总次数:0
代码可运行

接口签名参数Map字典排序

由于业务需要,需要对请求进行的签名,其中有一部分的算法就是需要对所有参数进行字典排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 方法用途: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),并且生成url参数串
 *
 * @param paramsMap  要排序的Map对象
 * @param urlEncode  是否需要URLENCODE
 * @param keyToLower 是否需要将Key转换为全小写 true:key转化成小写,false:不转化
 * @return
 */
public static String formatUrlMap(Map<String, Object> paramsMap, 
                                  boolean urlEncode, boolean keyToLower) {

    String buff = "";
    Map<String, Object> tmpMap = paramsMap;

    try {
        List<Map.Entry<String, Object>> infoIds = 
            new ArrayList<Map.Entry<String, Object>>(tmpMap.entrySet());

        //对所有传入参数按照字段名的ASCII码从小到大排序(字典序)
        Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
            public int compare(Map.Entry<String, Object> o1, 
                               Map.Entry<String, Object> o2) {
                return (o1.getKey()).toString().compareTo(o2.getKey());
            }
        });

        //构造URL 键值对的格式
        StringBuffer buf = new StringBuffer();
        for (Map.Entry<String, Object> item : infoIds) {
            if (StringUtils.isNotBlank(item.getKey())) {
                String key = item.getKey();
                String value = item.getValue().toString();
                if (urlEncode) {
                    value = URLEncoder.encode(value, "utf-8");
                }
                if (keyToLower) {
                    buf.append(key.toLowerCase() + "=" + value);
                } else {
                    buf.append(key + "=" + value);
                }
                buf.append("&");
            }
        }
        buff = buf.toString();

        if (StringUtils.isNotEmpty(buff)) {
            buff = buff.substring(0, buff.length() - 1);
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    return buff;
}

排序后可以进行其他处理,比如拼上nonce、时间戳等;

文章链接

https://www.cayzlh.com/post/20230301/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Map集合按照ASCII码从小到大(字典序)排序--JAVA
以下代码:将传参按照ASCII 码字典序排序,并将生成的字符串进行MD5加密 /** * Description:MD5工具生成token * @param value * @return */ public String getMD5Value(String value){ try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); byte[] md5ValueByteArra
麦克劳林
2018/09/11
5.5K0
接口签名规则和Java实现签名和验签代码
签名规则 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证接口调用传送的sign参数不参与签名,将生成的签名与该sign值作校验。 第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 注意:密钥的长度为32个字节。
oktokeep
2024/10/09
2700
Android微信支付生成签名的过程
微信支付所需要的参数链接 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2是 点击签名参数的描述即可链接是
程思扬
2022/01/10
1.5K0
Android微信支付生成签名的过程
java实现SHA1签名加密
1. 将参数与secret一起根据参数名进行字典排序,然后按照排序后顺序将参数名与参数值依次拼接成字符串
用户7741497
2022/08/09
3.6K0
Map按单个或多个Value排序,当Value相同时按Key排序
Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。
向着百万年薪努力的小赵
2023/01/10
2.9K0
接口签名规则及Java代码demo实现
签名规则 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则: ◆ 参数名ASCII码从小到大排序(字典序); ◆ 如果参数的值为空不参与签名; ◆ 参数名区分大小写; ◆ 验证接口调用传送的sign参数不参与签名,将生成的签名与该sign值作校验。 第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 注意:密钥的长度为32个字节。
oktokeep
2024/10/09
1400
企业微信系列之JSSDK使用权限签名对接
最近在对接企业微信,要将H5页面嵌在APP里,所以得根据企业微信官网规范,先对接JS-SDK使用权限签名 官网:JS-SDK使用权限签名算法
SmileNicky
2021/05/18
2.4K1
企业微信系列之JSSDK使用权限签名对接
RSA+AES实现接口验签和参数加密
RSA是一种常用的非对称加密算法,加密和加密使用不同的密钥,常用于要求安全性较高的加密场景,比如接口的验签和接口数据的加密与解密。与非对称加密算法对比,其安全性较高,但是加密性能却比较低,不适合高并发场景,一般只加密少量的数据。
时代疯
2021/07/23
3.8K0
java map遍历、排序,根据value获取key
若要取 map 中 value 的最大值 或 与之对应的 key(整型或浮点型):可利用list
Krry
2018/09/10
8.7K0
【数据结构】map&set详解
Set接口是一种不包含重复元素的集合。它继承自Collection接口,所以可以使用Collection所拥有的方法,Set接口的实现类主要有HashSet、LinkedHashSet、TreeSet等,它们各自以不同的方式存储元素,但都遵循Set接口的规定。
2的n次方
2024/10/15
1850
【数据结构】map&set详解
Java接口签名和验签
oktokeep
2024/10/09
1740
常用的Map集合
KeySet(): 将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
全栈程序员站长
2022/09/02
2030
如何保持json序列化的顺序性?
说到json,相信没有人会陌生,我们天天都在用。那么,我们来讨论个问题,json有序吗?是谁来决定的呢?如何保持?
烂猪皮
2021/03/16
4.3K0
使用RSA算法对接口参数签名及验签
在不同的服务器或系统之间通过API接口进行交互时,两个系统之间必须进行身份的验证,以满足安全上的防抵赖和防篡改。
端碗吹水
2020/09/23
1.7K0
使用RSA算法对接口参数签名及验签
腾讯AI-JavaAPI示例代码
https://gitee.com/xshuai/ai/tree/master/AIDemo/src/main/java/com/xs/tencent
小帅丶
2018/01/17
1K0
【微信开发】 红包接口开发
参考网上好几个版本的答案咯~ 分装 红包工具类 : package com.tepusoft.web.weixin.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.KeyStore; import java.security.NoSuchAlgorithmEx
冷冷
2018/02/08
2.6K0
记录一到当时没做出来的 “解析Json计算表达式值” 的算法题
转载请以链接形式标明出处: 本文出自:103style的博客 {a.b.e}) AND 题目描述 给定表达式 A = [ "${a.b.c}", "${not a.b.c}", "${a.b.d} AND {m.n}", "${a.b.d} OR {m.n}","${a.b.c} OR ((${not a.b.d} AND ${a.b.e}) AND ${not a.b.f})" ]; 1 代表 true, 0 代表 false. 给定 json 字符串 B = {"a":{"b":{
103style
2022/12/19
3360
Java集合框架(四)-HashMap
可以添加 null 的key 或者value,键只能由一个null,值可以由多个null;
化羽羽
2022/10/28
3430
万字长文讲解调用第三方接口,RestTemplate,urlConnection使用详解,java代码模拟postman发送请求
在日常开发中,经常需要调用第三方接口,例如调用物流接口,此时需要利用urlConnection或者restTemplate模拟postman发送请求,请求支持加header ,设置content-type支持传递json;请求方式get,post,也可以需要传递文件,或者传递文件流;
javaNice
2023/11/20
9600
第三方 API 接口安全加密方法和认证
与第三方系统做系统对接,接口认证是必不可少的,安全的认证方式可以极大的增强系统的安全性访问。
小柒2012
2023/04/04
8870
第三方 API 接口安全加密方法和认证
推荐阅读
相关推荐
Map集合按照ASCII码从小到大(字典序)排序--JAVA
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验