美文网首页
对请求参数转ASCII排序并MD5加密的记录

对请求参数转ASCII排序并MD5加密的记录

作者: YbSTGing | 来源:发表于2017-09-26 16:31 被阅读316次

最近项目中新增了数据传输的加密,特此记录,以待备用。

加密要求

要求.png

分析

  1. 获取当天的 11:11:11 的时间戳,单位:秒。
  2. 请求参数 转换为 ASCII码
  3. ASCII码 的值进行排序
  4. 将排序好的字符串进行 MD5加密

具体代码

1.获取时间戳
        //当前时间毫秒数
        long current=System.currentTimeMillis();
        //今天零点零分零秒的毫秒数
        long zero=current/(1000*3600*24)*(1000*3600*24)- TimeZone.getDefault().getRawOffset();
        //今天11点11分11秒的 秒 数
        long twelve=(zero+11*60*60*1000+11*60*1000+11*1000)/1000;
2.转换ASCII 码

下面这份资料可以直接使用,进行转换,且进行了排序(升序)。
参考资料

代码:

/**
     *
     * 方法用途: 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序),并且生成url参数串<br>
     * 实现步骤: <br>
     *
     * @param paraMap   要排序的Map对象
     * @param urlEncode   是否需要URLENCODE
     * @param keyToLower    是否需要将Key转换为全小写
     *            true:key转化成小写,false:不转化
     * @return
     */
    public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower)
    {
        String buff = "";
        Map<String, String> tmpMap = paraMap;
        try
        {
            List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());
            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
            Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>()
            {

                @Override
                public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2)
                {
                    return (o1.getKey()).toString().compareTo(o2.getKey());
                }
            });
            // 构造URL 键值对的格式
            StringBuilder buf = new StringBuilder();
            for (Map.Entry<String, String> item : infoIds)
            {
                if (StringUtils.isNotBlank(item.getKey()))
                {
                    String key = item.getKey();
                    String val = item.getValue();
                    if (urlEncode)
                    {
                        val = URLEncoder.encode(val, "utf-8");
                    }
                    if (keyToLower)
                    {
                        buf.append(key.toLowerCase() + "=" + val);
                    } else
                    {
                        buf.append(key + "=" + val);
                    }
                    buf.append("&");
                }

            }
            buff = buf.toString();
            if (buff.isEmpty() == false)
            {
                buff = buff.substring(0, buff.length() - 1);
            }
        } catch (Exception e)
        {
            return null;
        }
        return buff;
    }
3.排序上面已经完成,MD5加密通用。。完成。
snipaste20170926_162955.png

相关文章

网友评论

      本文标题:对请求参数转ASCII排序并MD5加密的记录

      本文链接:https://www.haomeiwen.com/subject/wonsextx.html