写法一:
/** * md5加密 * @param origin 明文 * @param charsetname 格式“utf-8” * @return */ public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(origin.getBytes("UTF-8")); BigInteger hash = new BigInteger(1, md.digest()); resultString = hash.toString(16); if ((resultString.length() % 2) != 0) { resultString = "0" + resultString; } } catch (Exception exception) { } return resultString; }
写法二:
private static final String MD5_SUFFIX = "_www.baidu.com_"; private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; /** * 字符加密 * @param str 明文 * @return 返回加了后缀的加密字符 */ public static String encryptByMD5(String str) { try { if (str == null || str.length() < 1 || "0".equals(str)) str = "0"; String tmp = md5(str + MD5_SUFFIX, "UTF-8"); if (null != tmp) { return replace(tmp, ":", "", -1).toLowerCase(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; } /** * md5加密方法,不可逆转 * @param str 明文 * @param charset 字符编码 * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String md5(String str, String charset) throws NoSuchAlgorithmException, UnsupportedEncodingException { byte[] tmpInput = null; if (null != str) { if (null != charset) { tmpInput = str.getBytes(charset); } else { tmpInput = str.getBytes(); } } else { return null; } MessageDigest alg = MessageDigest.getInstance("MD5"); // or "SHA-1" alg.update(tmpInput); return byte1hex(alg.digest()); }
public static String replace(String text, String repl, String with, int max) { if (isEmpty(text) || isEmpty(repl) || with == null || max == 0) { return text; } int start = 0; int end = text.indexOf(repl, start); if (end == -1) { return text; } int replLength = repl.length(); int increase = with.length() - replLength; increase = (increase < 0 ? 0 : increase); increase *= (max < 0 ? 16 : (max > 64 ? 64 : max)); StringBuffer buf = new StringBuffer(text.length() + increase); while (end != -1) { buf.append(text.substring(start, end)).append(with); start = end + replLength; if (--max == 0) { break; } end = text.indexOf(repl, start); } buf.append(text.substring(start)); return buf.toString(); }
/** * 字节码转换成16进制字符串 * @param inputByte * @return */ public static String byte1hex(byte[] inputByte) { if (null == inputByte) { return null; } String resultStr = ""; String tmpStr = ""; for (int n = 0; n < inputByte.length; n++) { tmpStr = (Integer.toHexString(inputByte[n] & 0XFF)); if (tmpStr.length() == 1) resultStr = resultStr + "0" + tmpStr; else resultStr = resultStr + tmpStr; if (n < inputByte.length - 1) resultStr = resultStr + ""; } return resultStr.toLowerCase(); }