js和java中文md5结果不一致问题及解决方案

    原文链接:https://www.wallsay.com/article/A20181228113000181

欢迎大家光临我自己的小站: 墙说日常

今天在实现网站功能的时候发现只要出现有中文就会导致js和java的md5结果不一致问题。举例如下:

一、md5英文或者数字

    前端

hex_md5('difadgsdaifdf');
"095ca9aa1649d039a28afed77a26307e"

    后端

public static void main(String[] args){
        System.out.println(DigestUtils.md5Hex("difadgsdaifdf"));
        //结果095ca9aa1649d039a28afed77a26307e
    }

可以看出js和java的MD5结果相同

二、md5中文

    前端

hex_md5('我的广场');
"e4532704b05cde222aafdf9ebd6e412f"

    后端

public static void main(String[] args){
        System.out.println(DigestUtils.md5Hex("我的广场"));
        //结果12eab8e5ad963e3de84bdd5132f3b228
    }

可以看出结果明显不一致

三、解决方法

我个人感觉是因为js和java的默认编码不一致导致的这个问题,所以我们在md5之前先统一urlEncode一下,代码如下:

前端

hex_md5(encodeURIComponent('我的广场'))
"f83bf8677a718292edd9dedd404854cb"

后端

public static void main(String[] args){
        try {
            System.out.println(DigestUtils.md5Hex(URLEncoder.encode("我的广场","utf-8")));
            //结果f83bf8677a718292edd9dedd404854cb
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

果然,md5之后的结果一致了。

你可能感兴趣的:(js和java中文md5结果不一致问题及解决方案)