package Utile; import java.math.BigInteger; import java.security.MessageDigest; /** * 對密碼進行MD5加密的工具類 * static與非static類區別: * 非static類,別的類應用此類方法是需實例化對象,臨時分配內存至JVM,會自動關閉 * static類中的方法,靜態化後內存會一直分配一塊空間給此類用來引用,直至程序關閉,不需實例化 * * @author Joy * */ public class MD5_Utile { //由於工具類方法不須要實例化 // 生成16位MD5密文 public static String getMD5(String c_password) { try { // 生成一個MD5加密計算摘要 MessageDigest md = MessageDigest.getInstance("MD5"); // 調用update方法計算MD5函數(參數:將密碼串轉換爲操做系統的字節編碼) md.update(c_password.getBytes()); // digest()最後返回md5的hash值,返回值爲8位的字符串,但此方法要先調用update // BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;獲得字符串形式的hash值,數值從1開始 // BigInteger會把0省略掉,需補全至32位,重寫一個方法將16位數轉換爲32位數 String md5 = new BigInteger(1, md.digest()).toString(16); return fillMD5(md5); } catch (Exception e) { throw new RuntimeException("MD5加密錯誤:" + e.getMessage(), e); } } // 將16位數轉爲32位 public static String fillMD5(String md5) { return md5.length() == 32 ? md5 : fillMD5("0" + md5); } }