public class Md5Encoder { private final static Log logger = LogFactory
.getLog(Md5Encoder.class); //
private final static String ALGORITHM = "MD5"; /**
 * 
 */
private Md5Encoder() { } /**
 * md5 encode.
 * @param rawPass
 * @return
 */
public static String encodePassword(String rawPass) {
MessageDigest messageDigest = null; try {
messageDigest = MessageDigest.getInstance(ALGORITHM);
} catch (NoSuchAlgorithmException e) {
logger.error(e.getMessage(), e);
} byte[] digest = messageDigest.digest(rawPass.getBytes()); if (logger.isDebugEnabled()) {
logger.debug("encode password is:"
+ new String(Hex.encodeHex(digest)));
} return new String(Hex.encodeHex(digest));
}
}

解决方案 »

  1.   

    有现成的
    java.security.MessageDigest;
      

  2.   

    /**
         * 十六进制字符
         */
        private final static String[] hexDigits = {
                                                  "0", "1", "2", "3", "4", "5", "6",
                                                  "7",
                                                  "8", "9", "a", "b", "c", "d", "e",
                                                  "f"};    public EncryptUtils() {
        }
        /**
         * 转换字节数组为16进制字符串或者全数组字符串
         * @param b 字节数组
         * @return 16进制字串
         */
        private static String byteArrayToString(byte[] b) {
            StringBuffer resultSb = new StringBuffer();
            for (byte aB : b) {
                resultSb.append(byteToHexString(aB));
            }
            return resultSb.toString();
        }    /**
         * 转换字节数组为十六进制字符串
         * @param b byte
         * @return String
         */
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0) {
                n = 256 + n;
            }
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }    /**
         * MD5加密算法
         * @param origin String 要加密的原始字符串
         * @return String MD5散列值,由32个8位的字符组成,返回空值表示出错
         */
        public static String MD5Encode(String origin) {
            String resultString;        try {
                resultString = origin;
                MessageDigest md = MessageDigest.getInstance("MD5");
                resultString = byteArrayToString(md.digest(resultString.getBytes()));
            } catch (Exception ex) {
                log.error("Cannot encode the string by MD5", ex);
                return "";
            }
            return resultString;
        }