MessageDigges md5与数据库md5字符串不同

时间:2013-12-18 08:18:19

标签: java

   MessageDigest md = MessageDigest.getInstance("MD5");
   String md5password = new String(md.digest("test".getBytes("UTF-8")), "UTF-8");

我的数据库中有相同的字符串"test",但在这里我得到的内容与此类似:

�k�F!�s��N�&'��

数据库:

098f6bcd4621d373cade4e832627b4f6

1 个答案:

答案 0 :(得分:2)

这是问题所在:

new String(md.digest("test".getBytes("UTF-8")), "UTF-8");

您正在尝试将MD5摘要的结果解码为UTF-8字符串。不是。它根本不是文本 - 它只是二进制数据。你正在做的就是尝试将图像或音乐文件作为字符串加载 - 这只是一个坏主意。

看起来您的数据库要么将其存储为二进制数据并显示十六进制表示,要么将其存储为十六进制。我建议你这样做。关于在Java中将字节数组转换为十六进制的Stack Overflow问题有很多,因此该部分应该很简单。