MessageDigest md = MessageDigest.getInstance("MD5");
String md5password = new String(md.digest("test".getBytes("UTF-8")), "UTF-8");
我的数据库中有相同的字符串"test"
,但在这里我得到的内容与此类似:
�k�F!�s��N�&'��
数据库:
098f6bcd4621d373cade4e832627b4f6
答案 0 :(得分:2)
这是问题所在:
new String(md.digest("test".getBytes("UTF-8")), "UTF-8");
您正在尝试将MD5摘要的结果解码为UTF-8字符串。不是。它根本不是文本 - 它只是二进制数据。你正在做的就是尝试将图像或音乐文件作为字符串加载 - 这只是一个坏主意。
看起来您的数据库要么将其存储为二进制数据并显示十六进制表示,要么将其存储为十六进制。我建议你这样做。关于在Java中将字节数组转换为十六进制的Stack Overflow问题有很多,因此该部分应该很简单。