美文网首页
对请求参数转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