Java MD5如何解密?

Python011

Java MD5如何解密?,第1张

MD5是单向加密的,不管何种数据进行MD5加密都会得到固定长度的字符串

MD5一般用户文件完整性的校验,也有用来做密码加密的。

想要破解MD5,因其本身的算法不可逆,故只能使用穷举法,也就是不断拼字符串加密和已知的MD5字符串进行比对,这是一个相当大的工程,需要庞大的数据基础。

package endecrypt

import java.io.UnsupportedEncodingException

import java.security.MessageDigest

import java.security.NoSuchAlgorithmException

/**

* 采用MD5加密解密

* @author tfq

* @datetime 2011-10-13

*/

public class MD5Util {

/***

* MD5加码 生成32位md5码

*/

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 = 0i <charArray.lengthi++)

byteArray[i] = (byte) charArray[i]

byte[] md5Bytes = md5.digest(byteArray)

StringBuffer hexValue = new StringBuffer()

for (int i = 0i <md5Bytes.lengthi++){

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 = 0i <a.lengthi++){

a[i] = (char) (a[i] ^ 't')

}

String s = new String(a)

return s

}

// 测试主函数

public static void main(String args[]) {

String s = new String("tangfuqiang")

System.out.println("原始:" + s)

System.out.println("MD5后:" + string2MD5(s))

System.out.println("加密的:" + convertMD5(s))

System.out.println("解密的:" + convertMD5(convertMD5(s)))

}

}

%ユZメΜ@

ヌmq<ュ

这个很正常。加密是将字节按照一定的规则进行了转换,转换后出什么样的怪字符都是正常的。

一般的做法是将加密后的byte数组转换为十六进制的字符串。

---------------------------------------------------------------------------------------------------------

import java.security.MessageDigest

public class Main {

public static void main(String[] args) throws Exception {

MessageDigest md = MessageDigest.getInstance("MD5")

byte[] b = md.digest("12345678".getBytes())

System.out.println(new String(b))

String result = ""

for (int i = 0i <b.lengthi++) {

String tmp = Integer.toHexString(b[i] &0xFF)

if (tmp.length() == 1) {

result += "0" + tmp

} else {

result += tmp

}

}

System.out.println(result)

}

}

运行结果

-------------------------------

%ユZメΜ@

ヌmq<ュ

25d55ad283aa400af464c76d713c07ad