数据库里存的密码是 e10adc3949ba59abbe56e057f20f883e
用的是MD5加密存的,怎么用Java将他解密出来呢?
这是MD5加密的工具类,用的是string2MD5这个方法
public class MD5Util {
public static String string2MD5(String inStr) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
char[] charArray = inStr.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
public static String convertMD5(String inStr) {
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++) {
a[i] = (char) (a[i] ^ 't');
}
String s = new String(a);
return s;
}
// 测试
public static void main(String args[]) {
String s = "123456";
System.out.println("原始:" + s);
System.out.println("MD5后:" + string2MD5(s));
}
感谢邀请。 不过大哥啊,你真敢想。 首先MD5是单向加密,密文结果有16位的,也有32位的。
若是几千字或者几万字的文章用MD5加密,结果是32位的密文:d754c572fd606694f3849fc24f13837c。 谁也不知道加密前的原文是什么。
除非是大服务器,使用碰撞计算,还有一定的可能。
若有帮助,记得采纳哦
MD5属于单向加密,一般解不出来。
由于MD5是不可逆的,所以无法直接解密出原始密码。通常的做法是使用字典攻击或暴力破解来尝试匹配加密后的密码和字典中的明文。不过,这是不推荐的安全做法,更好的做法是在用户输入密码时重新加密并与数据库中的密码进行比对。
MD5没有解密方法,只有用相同数据加密判断加密后的字符串是否相同来获取明文
“MD5加密”,就是它→信息-摘要算法,单向加密,不可逆。
像我们一般在下载一下东西时,经常在一些压缩包属性里,看到md5值。而且这个下载页面,很可能会在某一个地方,写了一句,此文件的MD5值为XXXXXXXXX。这有什么作用呢?
md5,其实就是一中算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。
所以,有人修过压缩包后,就会生成新的串,这时就可以拿网站提供的串和新生成的串对比,如果不同,那就是被人修过过了。
一个原始数据,只对应一个md5值;
但是一个md5值,可能对应多个原始数据。
MD5属于单向加密,解不了。