package com.util.md5;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * * @describe 实现将生成的MD5码进行加密和解密, * @author zhutianpeng * */public class UtilMD5 { private UtilMD5(){} //避免生成对象,实现静态访问 /** * @describe 实现MD5码进行二次加密后的编码 * @param str * @return secondCode */ public static String getConcertCodeMD5(String str){ String firstCode = string2MD5(str); String secondCode = convertMD5(firstCode); return secondCode; } /** * @describe 实现MD5码进行二次加密后的编码进行解密所生成的MD5码 * @param str * @return secondCode */ public static String getConcertEncodeMD5(String str){ String firstCode = convertMD5(str); String secondCode = string2MD5(firstCode); return secondCode; } /*** * @describe MD5加码 生成32位md5码 ,可用于MD5码比对 * @param str * @return hexValue.toString() */ public static String getGenerateCodeMD5(String str){ MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); System.out.println("【MD5算法异常,生成MD5码失败...】"); return ""; } char[] charArray = str.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(); } /** * 加密解密算法 执行一次加密,两次解密 */ private static String convertMD5(String str){ char[] temp = str.toCharArray(); for (int i = 0; i < temp.length; i++){ temp[i] = (char) (temp[i] ^ 'z'); } String myStr = new String(temp); return myStr; }}
public class Test { public static void main(String[] args) { String a = "aaa"; System.out.println("MD5码加密:"+UtilMD5.getConvertCodeMD5(a)); System.out.println("MD5码加密后解密:"+UtilMD5.getConvertEncodeMD5(UtilMD5.getConvertCodeMD5(a))); }}
注意:MD5是单向映射,在进行MD5加密后生成MD5码,是不能对MD5进行解密的,如果需要使用只能在生成MD5码后在进行比对