今天遇到了一个诡异的问题,用类似下面的代码,对不同的字符串区md5时得到的结果竟然一样,
public static void main(String[] args) {String s1 = DigestUtils.md5DigestAsHex("你好呀".getBytes());String s2 = DigestUtils.md5DigestAsHex("你好呢".getBytes());System.out.println(s1);System.out.println(s2);}
输出
0d1b08c34858921bc7c662b228acb7ba
0d1b08c34858921bc7c662b228acb7ba
排查了一下应该是字符串编码的问题,一般linux机器上默认的编码时ISO8859, 导致信息丢失,所以在转byte时指定字符串的编码就好了
public static void main(String[] args) {//无参getBytes一般使用系统默认编码,如果正好系统是ISO8859,而你又要处理中文,就会出现问题,换成utf8就没问题了String s1 = DigestUtils.md5DigestAsHex("你好呀".getBytes(StandardCharsets.UTF_8));String s2 = DigestUtils.md5DigestAsHex("你好呢".getBytes(StandardCharsets.UTF_8));System.out.println(s1);System.out.println(s2);}