package testMD5;
  import java.security.MessageDigest;
  import java.security.NoSuchAlgorithmException;
  /**
  * 采用MD5加密解密
  *
  * @authortfq
  * @datetime2011-10-13
  */
  public class TestMD5 {
  /***
  * 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 = 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 = new String("456");
  System.out.println("原始:" + s);
  System.out.println("MD5后:" + string2MD5(s));
  System.out.println("加密的:" + convertMD5(s));
  System.out.println("解密的:" + convertMD5(convertMD5(s)));
  }
  }