首页 > 试题广场 >

计算参数的hash值

[编程题]计算参数的hash值
  • 热度指数:23 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在和外部公司联调HTTP接口时,对方要求调用的接口需要计算token,给到的规则如下:
1) 所有的参数值必须经过urlencode,编码为utf-8;
2) 对编码后数据按照key值进行字典升序排序;
3)将所有的参数按照排序的顺序拼接成字符串 ,格式如下: k1=v1&k2=v2&k3=v3;
4)  将第三步的算出的值计算md5值,md5加密的值小写

请你编写一段方法计算token值
示例1

输入

["query=中文","version=1.0.0"]

输出

"be61411477191613e6df13bde939297a"

备注:
请注意会有中文;
    public String getToken(Map<String, String> params) {
        List<String> ss = params.keySet().stream().sorted().map(
            k -> {
                String v = params.get(k);
                String kv = null;
                try {
                    kv = k + "=" + URLEncoder.encode(v, "utf-8");
                } catch (Exception e) {

                }
                return kv;
            }
        ).collect(Collectors.toList());
        String token = null;
        try {
            token = new String(MessageDigest.getInstance("md5").digest(String.join("&", ss).getBytes()));
        } catch (Exception e) {
        }
        return token;
    }

发表于 2021-09-07 15:25:45 回复(2)