java md5还原_Java MD5加密与反编译

package hello1;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MdText{

/*

* @Description:TODO(main函数 门)

*

* @param args

*

* @return void

*/

public stativ void main(String[] args){

String s=new String("yunquegongmi");

System.out.println("要加密的字符串为" + s);

System.out.println("已加密的字符串为" + md5(s));

System.out.println("MD5后再加密为" + KL(md5(s)));

System.out.println("MD5再加密后解密为" + jm(KL(md5(s))));

}

/*

* @Description:TODO(进行32位的MD5加密)

*

* @param String inStr 要解密的字符串

*

* @return void

*

* 思路:

* 1.获取到MD5这个对象

* 2.加密

*/

public static String md5(String inStr){

MessageDigest md5=null;

// 1.获取MD5这个对象,获取信息摘要对象

try{

md5=MessageDigest.getInstance("MD5");

}catch(NoSuchAlgorithmException e){

e.printStackTrace();

}

// 2.将字符串对象中的每一个字符转换成一个字符数组——toCharArray()的用法

char[] charArray = inStr.tiCharArray();

// 3.定义一个长度和char数组相同的byte字节数组

byte[] byteArray = new byte[charArray.length];

// 4.将char数组中的内容放到byte数组中

for(int i=0;i

// {} for{} if{} 里面的代码只有一行的时候 {}可以省略

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

}

// 5.md5这个对象 对字节数组进行摘要 得到一个摘要字节数组

byte[] md5Bytes = md5.digest(byteArray);

// 6.把摘要字节数组中的每一个字节转换成16进制 并且拼在一起就得到了MD5值

// StringBuffer:对字符串进行操作 操作字符串的一个工具箱

StringBuffer hexValue=new StringBuffer();

for(int i=0;i

// 转换成16进制 int 整数型

int val=((int)md5Bytes[i]) & 0xff;

// 如果生成的数字未满32位,需要在前面补0

if(val<16){

hexValue.append("0");

// Integer.toHexString(val) 将其转为16进制的方法

hexValue.append(Integer.toHexString(val));

}

}

return hexValue.toString();

}

// 可逆的加密算法 加盐加密

/*

* @Description:TODO(可逆的加密算法 加盐加密)

*

* @param String inStr 要加密的字符串

*

* @return String

*/

public static String KL(String inStr){

// 将字符串转换成一个字符数组 给每个字符加密

char[] charArray = inStr.toCharArray();

for(int i=0;i

/*

* ^ 异或运算符 如果a[i],'t'两个值不相同 异或结果就为1 如果相同的话就为0

*/

charArray[i] = (char) (charArray[i] ^ 't');

}

String s = new String(charArray);

return s;

}

// MD5加密以后 他会生成不同的字符串 不能反编译

/*

*@Description:TODO(反编译)

*

*@param String inStr 要解密的字符串

*

*@return String

*/

public static String jm(Stirng inStr){

// 将字符串转换成为一个字符数组,给每一个字符进行解密

char[] charArray = inStr.toCharArray();

for(int i=0;i

charArray[i] = (char)(charArray[i] ^ 't');

}

String k=new String(charArray);

return k;

}

}


版权声明:本文为weixin_28312391原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。